diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(AuthenticationHelper.getToken(), begTime, endTime); } /** diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } 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 dbfb31b..e8ecc14 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -2,7 +2,8 @@ import androidx.lifecycle.MutableLiveData; -import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.CaseResourceBean; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.model.HighEventBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -20,12 +21,13 @@ public class DataAnalysisViewModel extends BaseViewModel { private final Gson gson = new Gson(); - public MutableLiveData eventSourceModel = new MutableLiveData<>(); + public MutableLiveData cityBaseData = new MutableLiveData<>(); + public MutableLiveData caseResourceData = new MutableLiveData<>(); public MutableLiveData highEventModel = new MutableLiveData<>(); - public void obtainEventSource(String begTime, String endTime) { + public void getCityBaseData() { loadState.setValue(LoadState.Loading); - Observable observable = RetrofitServiceManager.getEventSource(begTime, endTime); + Observable observable = RetrofitServiceManager.getCityBaseData(); ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { @Override public void onCompleted() { @@ -43,9 +45,42 @@ String response = responseBody.string(); int responseCode = StringHelper.separateResponseCode(response); if (responseCode == 200) { - EventSourceBean resultBean = gson.fromJson(response, new TypeToken() { + CityBaseDataBean resultBean = gson.fromJson(response, new TypeToken() { }.getType()); - eventSourceModel.setValue(resultBean); + cityBaseData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getCaseResource(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getCaseResource(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) { + CaseResourceBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + caseResourceData.setValue(resultBean); } else { loadState.setValue(LoadState.Fail); } diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } 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 dbfb31b..e8ecc14 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -2,7 +2,8 @@ import androidx.lifecycle.MutableLiveData; -import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.CaseResourceBean; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.model.HighEventBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -20,12 +21,13 @@ public class DataAnalysisViewModel extends BaseViewModel { private final Gson gson = new Gson(); - public MutableLiveData eventSourceModel = new MutableLiveData<>(); + public MutableLiveData cityBaseData = new MutableLiveData<>(); + public MutableLiveData caseResourceData = new MutableLiveData<>(); public MutableLiveData highEventModel = new MutableLiveData<>(); - public void obtainEventSource(String begTime, String endTime) { + public void getCityBaseData() { loadState.setValue(LoadState.Loading); - Observable observable = RetrofitServiceManager.getEventSource(begTime, endTime); + Observable observable = RetrofitServiceManager.getCityBaseData(); ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { @Override public void onCompleted() { @@ -43,9 +45,42 @@ String response = responseBody.string(); int responseCode = StringHelper.separateResponseCode(response); if (responseCode == 200) { - EventSourceBean resultBean = gson.fromJson(response, new TypeToken() { + CityBaseDataBean resultBean = gson.fromJson(response, new TypeToken() { }.getType()); - eventSourceModel.setValue(resultBean); + cityBaseData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getCaseResource(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getCaseResource(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) { + CaseResourceBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + caseResourceData.setValue(resultBean); } else { loadState.setValue(LoadState.Fail); } diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..3916492 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } 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 dbfb31b..e8ecc14 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -2,7 +2,8 @@ import androidx.lifecycle.MutableLiveData; -import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.CaseResourceBean; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.model.HighEventBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -20,12 +21,13 @@ public class DataAnalysisViewModel extends BaseViewModel { private final Gson gson = new Gson(); - public MutableLiveData eventSourceModel = new MutableLiveData<>(); + public MutableLiveData cityBaseData = new MutableLiveData<>(); + public MutableLiveData caseResourceData = new MutableLiveData<>(); public MutableLiveData highEventModel = new MutableLiveData<>(); - public void obtainEventSource(String begTime, String endTime) { + public void getCityBaseData() { loadState.setValue(LoadState.Loading); - Observable observable = RetrofitServiceManager.getEventSource(begTime, endTime); + Observable observable = RetrofitServiceManager.getCityBaseData(); ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { @Override public void onCompleted() { @@ -43,9 +45,42 @@ String response = responseBody.string(); int responseCode = StringHelper.separateResponseCode(response); if (responseCode == 200) { - EventSourceBean resultBean = gson.fromJson(response, new TypeToken() { + CityBaseDataBean resultBean = gson.fromJson(response, new TypeToken() { }.getType()); - eventSourceModel.setValue(resultBean); + cityBaseData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getCaseResource(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getCaseResource(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) { + CaseResourceBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + caseResourceData.setValue(resultBean); } else { loadState.setValue(LoadState.Fail); } diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..3916492 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 015123a..671d92b 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,44 +7,96 @@ + layout="@layout/include_base_title" /> - + android:layout_marginHorizontal="@dimen/dp_10" + android:layout_marginTop="@dimen/dp_10" + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } 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 dbfb31b..e8ecc14 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -2,7 +2,8 @@ import androidx.lifecycle.MutableLiveData; -import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.CaseResourceBean; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.model.HighEventBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -20,12 +21,13 @@ public class DataAnalysisViewModel extends BaseViewModel { private final Gson gson = new Gson(); - public MutableLiveData eventSourceModel = new MutableLiveData<>(); + public MutableLiveData cityBaseData = new MutableLiveData<>(); + public MutableLiveData caseResourceData = new MutableLiveData<>(); public MutableLiveData highEventModel = new MutableLiveData<>(); - public void obtainEventSource(String begTime, String endTime) { + public void getCityBaseData() { loadState.setValue(LoadState.Loading); - Observable observable = RetrofitServiceManager.getEventSource(begTime, endTime); + Observable observable = RetrofitServiceManager.getCityBaseData(); ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { @Override public void onCompleted() { @@ -43,9 +45,42 @@ String response = responseBody.string(); int responseCode = StringHelper.separateResponseCode(response); if (responseCode == 200) { - EventSourceBean resultBean = gson.fromJson(response, new TypeToken() { + CityBaseDataBean resultBean = gson.fromJson(response, new TypeToken() { }.getType()); - eventSourceModel.setValue(resultBean); + cityBaseData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getCaseResource(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getCaseResource(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) { + CaseResourceBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + caseResourceData.setValue(resultBean); } else { loadState.setValue(LoadState.Fail); } diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..3916492 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 015123a..671d92b 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,44 +7,96 @@ + layout="@layout/include_base_title" /> - + android:layout_marginHorizontal="@dimen/dp_10" + android:layout_marginTop="@dimen/dp_10" + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml index 91cb65a..ec4b923 100644 --- a/app/src/main/res/layout/activity_city_base_data.xml +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -7,38 +7,12 @@ + layout="@layout/include_base_title" /> - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="2" /> \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } 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 dbfb31b..e8ecc14 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -2,7 +2,8 @@ import androidx.lifecycle.MutableLiveData; -import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.CaseResourceBean; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.model.HighEventBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -20,12 +21,13 @@ public class DataAnalysisViewModel extends BaseViewModel { private final Gson gson = new Gson(); - public MutableLiveData eventSourceModel = new MutableLiveData<>(); + public MutableLiveData cityBaseData = new MutableLiveData<>(); + public MutableLiveData caseResourceData = new MutableLiveData<>(); public MutableLiveData highEventModel = new MutableLiveData<>(); - public void obtainEventSource(String begTime, String endTime) { + public void getCityBaseData() { loadState.setValue(LoadState.Loading); - Observable observable = RetrofitServiceManager.getEventSource(begTime, endTime); + Observable observable = RetrofitServiceManager.getCityBaseData(); ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { @Override public void onCompleted() { @@ -43,9 +45,42 @@ String response = responseBody.string(); int responseCode = StringHelper.separateResponseCode(response); if (responseCode == 200) { - EventSourceBean resultBean = gson.fromJson(response, new TypeToken() { + CityBaseDataBean resultBean = gson.fromJson(response, new TypeToken() { }.getType()); - eventSourceModel.setValue(resultBean); + cityBaseData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getCaseResource(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getCaseResource(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) { + CaseResourceBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + caseResourceData.setValue(resultBean); } else { loadState.setValue(LoadState.Fail); } diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..3916492 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 015123a..671d92b 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,44 +7,96 @@ + layout="@layout/include_base_title" /> - + android:layout_marginHorizontal="@dimen/dp_10" + android:layout_marginTop="@dimen/dp_10" + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml index 91cb65a..ec4b923 100644 --- a/app/src/main/res/layout/activity_city_base_data.xml +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -7,38 +7,12 @@ + layout="@layout/include_base_title" /> - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="2" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_base_city_data_rv_g.xml b/app/src/main/res/layout/item_base_city_data_rv_g.xml new file mode 100644 index 0000000..db8aa89 --- /dev/null +++ b/app/src/main/res/layout/item_base_city_data_rv_g.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } 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 dbfb31b..e8ecc14 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -2,7 +2,8 @@ import androidx.lifecycle.MutableLiveData; -import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.CaseResourceBean; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.model.HighEventBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -20,12 +21,13 @@ public class DataAnalysisViewModel extends BaseViewModel { private final Gson gson = new Gson(); - public MutableLiveData eventSourceModel = new MutableLiveData<>(); + public MutableLiveData cityBaseData = new MutableLiveData<>(); + public MutableLiveData caseResourceData = new MutableLiveData<>(); public MutableLiveData highEventModel = new MutableLiveData<>(); - public void obtainEventSource(String begTime, String endTime) { + public void getCityBaseData() { loadState.setValue(LoadState.Loading); - Observable observable = RetrofitServiceManager.getEventSource(begTime, endTime); + Observable observable = RetrofitServiceManager.getCityBaseData(); ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { @Override public void onCompleted() { @@ -43,9 +45,42 @@ String response = responseBody.string(); int responseCode = StringHelper.separateResponseCode(response); if (responseCode == 200) { - EventSourceBean resultBean = gson.fromJson(response, new TypeToken() { + CityBaseDataBean resultBean = gson.fromJson(response, new TypeToken() { }.getType()); - eventSourceModel.setValue(resultBean); + cityBaseData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getCaseResource(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getCaseResource(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) { + CaseResourceBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + caseResourceData.setValue(resultBean); } else { loadState.setValue(LoadState.Fail); } diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..3916492 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 015123a..671d92b 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,44 +7,96 @@ + layout="@layout/include_base_title" /> - + android:layout_marginHorizontal="@dimen/dp_10" + android:layout_marginTop="@dimen/dp_10" + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml index 91cb65a..ec4b923 100644 --- a/app/src/main/res/layout/activity_city_base_data.xml +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -7,38 +7,12 @@ + layout="@layout/include_base_title" /> - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="2" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_base_city_data_rv_g.xml b/app/src/main/res/layout/item_base_city_data_rv_g.xml new file mode 100644 index 0000000..db8aa89 --- /dev/null +++ b/app/src/main/res/layout/item_base_city_data_rv_g.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_case_resource_lv_l.xml b/app/src/main/res/layout/item_case_resource_lv_l.xml new file mode 100644 index 0000000..fa4dbd4 --- /dev/null +++ b/app/src/main/res/layout/item_case_resource_lv_l.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } 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 dbfb31b..e8ecc14 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -2,7 +2,8 @@ import androidx.lifecycle.MutableLiveData; -import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.CaseResourceBean; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.model.HighEventBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -20,12 +21,13 @@ public class DataAnalysisViewModel extends BaseViewModel { private final Gson gson = new Gson(); - public MutableLiveData eventSourceModel = new MutableLiveData<>(); + public MutableLiveData cityBaseData = new MutableLiveData<>(); + public MutableLiveData caseResourceData = new MutableLiveData<>(); public MutableLiveData highEventModel = new MutableLiveData<>(); - public void obtainEventSource(String begTime, String endTime) { + public void getCityBaseData() { loadState.setValue(LoadState.Loading); - Observable observable = RetrofitServiceManager.getEventSource(begTime, endTime); + Observable observable = RetrofitServiceManager.getCityBaseData(); ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { @Override public void onCompleted() { @@ -43,9 +45,42 @@ String response = responseBody.string(); int responseCode = StringHelper.separateResponseCode(response); if (responseCode == 200) { - EventSourceBean resultBean = gson.fromJson(response, new TypeToken() { + CityBaseDataBean resultBean = gson.fromJson(response, new TypeToken() { }.getType()); - eventSourceModel.setValue(resultBean); + cityBaseData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getCaseResource(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getCaseResource(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) { + CaseResourceBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + caseResourceData.setValue(resultBean); } else { loadState.setValue(LoadState.Fail); } diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..3916492 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 015123a..671d92b 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,44 +7,96 @@ + layout="@layout/include_base_title" /> - + android:layout_marginHorizontal="@dimen/dp_10" + android:layout_marginTop="@dimen/dp_10" + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml index 91cb65a..ec4b923 100644 --- a/app/src/main/res/layout/activity_city_base_data.xml +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -7,38 +7,12 @@ + layout="@layout/include_base_title" /> - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="2" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_base_city_data_rv_g.xml b/app/src/main/res/layout/item_base_city_data_rv_g.xml new file mode 100644 index 0000000..db8aa89 --- /dev/null +++ b/app/src/main/res/layout/item_base_city_data_rv_g.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_case_resource_lv_l.xml b/app/src/main/res/layout/item_case_resource_lv_l.xml new file mode 100644 index 0000000..fa4dbd4 --- /dev/null +++ b/app/src/main/res/layout/item_case_resource_lv_l.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_recycleview.xml b/app/src/main/res/layout/item_home_recycleview.xml deleted file mode 100644 index b1bb791..0000000 --- a/app/src/main/res/layout/item_home_recycleview.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } 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 dbfb31b..e8ecc14 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -2,7 +2,8 @@ import androidx.lifecycle.MutableLiveData; -import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.CaseResourceBean; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.model.HighEventBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -20,12 +21,13 @@ public class DataAnalysisViewModel extends BaseViewModel { private final Gson gson = new Gson(); - public MutableLiveData eventSourceModel = new MutableLiveData<>(); + public MutableLiveData cityBaseData = new MutableLiveData<>(); + public MutableLiveData caseResourceData = new MutableLiveData<>(); public MutableLiveData highEventModel = new MutableLiveData<>(); - public void obtainEventSource(String begTime, String endTime) { + public void getCityBaseData() { loadState.setValue(LoadState.Loading); - Observable observable = RetrofitServiceManager.getEventSource(begTime, endTime); + Observable observable = RetrofitServiceManager.getCityBaseData(); ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { @Override public void onCompleted() { @@ -43,9 +45,42 @@ String response = responseBody.string(); int responseCode = StringHelper.separateResponseCode(response); if (responseCode == 200) { - EventSourceBean resultBean = gson.fromJson(response, new TypeToken() { + CityBaseDataBean resultBean = gson.fromJson(response, new TypeToken() { }.getType()); - eventSourceModel.setValue(resultBean); + cityBaseData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getCaseResource(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getCaseResource(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) { + CaseResourceBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + caseResourceData.setValue(resultBean); } else { loadState.setValue(LoadState.Fail); } diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..3916492 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 015123a..671d92b 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,44 +7,96 @@ + layout="@layout/include_base_title" /> - + android:layout_marginHorizontal="@dimen/dp_10" + android:layout_marginTop="@dimen/dp_10" + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml index 91cb65a..ec4b923 100644 --- a/app/src/main/res/layout/activity_city_base_data.xml +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -7,38 +7,12 @@ + layout="@layout/include_base_title" /> - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="2" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_base_city_data_rv_g.xml b/app/src/main/res/layout/item_base_city_data_rv_g.xml new file mode 100644 index 0000000..db8aa89 --- /dev/null +++ b/app/src/main/res/layout/item_base_city_data_rv_g.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_case_resource_lv_l.xml b/app/src/main/res/layout/item_case_resource_lv_l.xml new file mode 100644 index 0000000..fa4dbd4 --- /dev/null +++ b/app/src/main/res/layout/item_case_resource_lv_l.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_recycleview.xml b/app/src/main/res/layout/item_home_recycleview.xml deleted file mode 100644 index b1bb791..0000000 --- a/app/src/main/res/layout/item_home_recycleview.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_rv_g.xml b/app/src/main/res/layout/item_home_rv_g.xml new file mode 100644 index 0000000..b1bb791 --- /dev/null +++ b/app/src/main/res/layout/item_home_rv_g.xml @@ -0,0 +1,32 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } 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 dbfb31b..e8ecc14 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -2,7 +2,8 @@ import androidx.lifecycle.MutableLiveData; -import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.CaseResourceBean; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.model.HighEventBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -20,12 +21,13 @@ public class DataAnalysisViewModel extends BaseViewModel { private final Gson gson = new Gson(); - public MutableLiveData eventSourceModel = new MutableLiveData<>(); + public MutableLiveData cityBaseData = new MutableLiveData<>(); + public MutableLiveData caseResourceData = new MutableLiveData<>(); public MutableLiveData highEventModel = new MutableLiveData<>(); - public void obtainEventSource(String begTime, String endTime) { + public void getCityBaseData() { loadState.setValue(LoadState.Loading); - Observable observable = RetrofitServiceManager.getEventSource(begTime, endTime); + Observable observable = RetrofitServiceManager.getCityBaseData(); ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { @Override public void onCompleted() { @@ -43,9 +45,42 @@ String response = responseBody.string(); int responseCode = StringHelper.separateResponseCode(response); if (responseCode == 200) { - EventSourceBean resultBean = gson.fromJson(response, new TypeToken() { + CityBaseDataBean resultBean = gson.fromJson(response, new TypeToken() { }.getType()); - eventSourceModel.setValue(resultBean); + cityBaseData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getCaseResource(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getCaseResource(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) { + CaseResourceBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + caseResourceData.setValue(resultBean); } else { loadState.setValue(LoadState.Fail); } diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..3916492 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 015123a..671d92b 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,44 +7,96 @@ + layout="@layout/include_base_title" /> - + android:layout_marginHorizontal="@dimen/dp_10" + android:layout_marginTop="@dimen/dp_10" + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml index 91cb65a..ec4b923 100644 --- a/app/src/main/res/layout/activity_city_base_data.xml +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -7,38 +7,12 @@ + layout="@layout/include_base_title" /> - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="2" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_base_city_data_rv_g.xml b/app/src/main/res/layout/item_base_city_data_rv_g.xml new file mode 100644 index 0000000..db8aa89 --- /dev/null +++ b/app/src/main/res/layout/item_base_city_data_rv_g.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_case_resource_lv_l.xml b/app/src/main/res/layout/item_case_resource_lv_l.xml new file mode 100644 index 0000000..fa4dbd4 --- /dev/null +++ b/app/src/main/res/layout/item_case_resource_lv_l.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_recycleview.xml b/app/src/main/res/layout/item_home_recycleview.xml deleted file mode 100644 index b1bb791..0000000 --- a/app/src/main/res/layout/item_home_recycleview.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_rv_g.xml b/app/src/main/res/layout/item_home_rv_g.xml new file mode 100644 index 0000000..b1bb791 --- /dev/null +++ b/app/src/main/res/layout/item_home_rv_g.xml @@ -0,0 +1,32 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/data_bucket.png b/app/src/main/res/mipmap-xxhdpi/data_bucket.png new file mode 100644 index 0000000..0cff66e --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_bucket.png Binary files differ diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } 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 dbfb31b..e8ecc14 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -2,7 +2,8 @@ import androidx.lifecycle.MutableLiveData; -import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.CaseResourceBean; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.model.HighEventBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -20,12 +21,13 @@ public class DataAnalysisViewModel extends BaseViewModel { private final Gson gson = new Gson(); - public MutableLiveData eventSourceModel = new MutableLiveData<>(); + public MutableLiveData cityBaseData = new MutableLiveData<>(); + public MutableLiveData caseResourceData = new MutableLiveData<>(); public MutableLiveData highEventModel = new MutableLiveData<>(); - public void obtainEventSource(String begTime, String endTime) { + public void getCityBaseData() { loadState.setValue(LoadState.Loading); - Observable observable = RetrofitServiceManager.getEventSource(begTime, endTime); + Observable observable = RetrofitServiceManager.getCityBaseData(); ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { @Override public void onCompleted() { @@ -43,9 +45,42 @@ String response = responseBody.string(); int responseCode = StringHelper.separateResponseCode(response); if (responseCode == 200) { - EventSourceBean resultBean = gson.fromJson(response, new TypeToken() { + CityBaseDataBean resultBean = gson.fromJson(response, new TypeToken() { }.getType()); - eventSourceModel.setValue(resultBean); + cityBaseData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getCaseResource(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getCaseResource(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) { + CaseResourceBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + caseResourceData.setValue(resultBean); } else { loadState.setValue(LoadState.Fail); } diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..3916492 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 015123a..671d92b 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,44 +7,96 @@ + layout="@layout/include_base_title" /> - + android:layout_marginHorizontal="@dimen/dp_10" + android:layout_marginTop="@dimen/dp_10" + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml index 91cb65a..ec4b923 100644 --- a/app/src/main/res/layout/activity_city_base_data.xml +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -7,38 +7,12 @@ + layout="@layout/include_base_title" /> - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="2" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_base_city_data_rv_g.xml b/app/src/main/res/layout/item_base_city_data_rv_g.xml new file mode 100644 index 0000000..db8aa89 --- /dev/null +++ b/app/src/main/res/layout/item_base_city_data_rv_g.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_case_resource_lv_l.xml b/app/src/main/res/layout/item_case_resource_lv_l.xml new file mode 100644 index 0000000..fa4dbd4 --- /dev/null +++ b/app/src/main/res/layout/item_case_resource_lv_l.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_recycleview.xml b/app/src/main/res/layout/item_home_recycleview.xml deleted file mode 100644 index b1bb791..0000000 --- a/app/src/main/res/layout/item_home_recycleview.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_rv_g.xml b/app/src/main/res/layout/item_home_rv_g.xml new file mode 100644 index 0000000..b1bb791 --- /dev/null +++ b/app/src/main/res/layout/item_home_rv_g.xml @@ -0,0 +1,32 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/data_bucket.png b/app/src/main/res/mipmap-xxhdpi/data_bucket.png new file mode 100644 index 0000000..0cff66e --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_bucket.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_car.png b/app/src/main/res/mipmap-xxhdpi/data_car.png new file mode 100644 index 0000000..7cc43fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_car.png Binary files differ diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } 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 dbfb31b..e8ecc14 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -2,7 +2,8 @@ import androidx.lifecycle.MutableLiveData; -import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.CaseResourceBean; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.model.HighEventBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -20,12 +21,13 @@ public class DataAnalysisViewModel extends BaseViewModel { private final Gson gson = new Gson(); - public MutableLiveData eventSourceModel = new MutableLiveData<>(); + public MutableLiveData cityBaseData = new MutableLiveData<>(); + public MutableLiveData caseResourceData = new MutableLiveData<>(); public MutableLiveData highEventModel = new MutableLiveData<>(); - public void obtainEventSource(String begTime, String endTime) { + public void getCityBaseData() { loadState.setValue(LoadState.Loading); - Observable observable = RetrofitServiceManager.getEventSource(begTime, endTime); + Observable observable = RetrofitServiceManager.getCityBaseData(); ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { @Override public void onCompleted() { @@ -43,9 +45,42 @@ String response = responseBody.string(); int responseCode = StringHelper.separateResponseCode(response); if (responseCode == 200) { - EventSourceBean resultBean = gson.fromJson(response, new TypeToken() { + CityBaseDataBean resultBean = gson.fromJson(response, new TypeToken() { }.getType()); - eventSourceModel.setValue(resultBean); + cityBaseData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getCaseResource(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getCaseResource(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) { + CaseResourceBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + caseResourceData.setValue(resultBean); } else { loadState.setValue(LoadState.Fail); } diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..3916492 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 015123a..671d92b 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,44 +7,96 @@ + layout="@layout/include_base_title" /> - + android:layout_marginHorizontal="@dimen/dp_10" + android:layout_marginTop="@dimen/dp_10" + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml index 91cb65a..ec4b923 100644 --- a/app/src/main/res/layout/activity_city_base_data.xml +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -7,38 +7,12 @@ + layout="@layout/include_base_title" /> - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="2" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_base_city_data_rv_g.xml b/app/src/main/res/layout/item_base_city_data_rv_g.xml new file mode 100644 index 0000000..db8aa89 --- /dev/null +++ b/app/src/main/res/layout/item_base_city_data_rv_g.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_case_resource_lv_l.xml b/app/src/main/res/layout/item_case_resource_lv_l.xml new file mode 100644 index 0000000..fa4dbd4 --- /dev/null +++ b/app/src/main/res/layout/item_case_resource_lv_l.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_recycleview.xml b/app/src/main/res/layout/item_home_recycleview.xml deleted file mode 100644 index b1bb791..0000000 --- a/app/src/main/res/layout/item_home_recycleview.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_rv_g.xml b/app/src/main/res/layout/item_home_rv_g.xml new file mode 100644 index 0000000..b1bb791 --- /dev/null +++ b/app/src/main/res/layout/item_home_rv_g.xml @@ -0,0 +1,32 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/data_bucket.png b/app/src/main/res/mipmap-xxhdpi/data_bucket.png new file mode 100644 index 0000000..0cff66e --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_bucket.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_car.png b/app/src/main/res/mipmap-xxhdpi/data_car.png new file mode 100644 index 0000000..7cc43fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_car.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_component.png b/app/src/main/res/mipmap-xxhdpi/data_component.png new file mode 100644 index 0000000..98e2b85 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_component.png Binary files differ diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } 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 dbfb31b..e8ecc14 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -2,7 +2,8 @@ import androidx.lifecycle.MutableLiveData; -import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.CaseResourceBean; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.model.HighEventBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -20,12 +21,13 @@ public class DataAnalysisViewModel extends BaseViewModel { private final Gson gson = new Gson(); - public MutableLiveData eventSourceModel = new MutableLiveData<>(); + public MutableLiveData cityBaseData = new MutableLiveData<>(); + public MutableLiveData caseResourceData = new MutableLiveData<>(); public MutableLiveData highEventModel = new MutableLiveData<>(); - public void obtainEventSource(String begTime, String endTime) { + public void getCityBaseData() { loadState.setValue(LoadState.Loading); - Observable observable = RetrofitServiceManager.getEventSource(begTime, endTime); + Observable observable = RetrofitServiceManager.getCityBaseData(); ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { @Override public void onCompleted() { @@ -43,9 +45,42 @@ String response = responseBody.string(); int responseCode = StringHelper.separateResponseCode(response); if (responseCode == 200) { - EventSourceBean resultBean = gson.fromJson(response, new TypeToken() { + CityBaseDataBean resultBean = gson.fromJson(response, new TypeToken() { }.getType()); - eventSourceModel.setValue(resultBean); + cityBaseData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getCaseResource(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getCaseResource(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) { + CaseResourceBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + caseResourceData.setValue(resultBean); } else { loadState.setValue(LoadState.Fail); } diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..3916492 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 015123a..671d92b 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,44 +7,96 @@ + layout="@layout/include_base_title" /> - + android:layout_marginHorizontal="@dimen/dp_10" + android:layout_marginTop="@dimen/dp_10" + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml index 91cb65a..ec4b923 100644 --- a/app/src/main/res/layout/activity_city_base_data.xml +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -7,38 +7,12 @@ + layout="@layout/include_base_title" /> - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="2" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_base_city_data_rv_g.xml b/app/src/main/res/layout/item_base_city_data_rv_g.xml new file mode 100644 index 0000000..db8aa89 --- /dev/null +++ b/app/src/main/res/layout/item_base_city_data_rv_g.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_case_resource_lv_l.xml b/app/src/main/res/layout/item_case_resource_lv_l.xml new file mode 100644 index 0000000..fa4dbd4 --- /dev/null +++ b/app/src/main/res/layout/item_case_resource_lv_l.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_recycleview.xml b/app/src/main/res/layout/item_home_recycleview.xml deleted file mode 100644 index b1bb791..0000000 --- a/app/src/main/res/layout/item_home_recycleview.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_rv_g.xml b/app/src/main/res/layout/item_home_rv_g.xml new file mode 100644 index 0000000..b1bb791 --- /dev/null +++ b/app/src/main/res/layout/item_home_rv_g.xml @@ -0,0 +1,32 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/data_bucket.png b/app/src/main/res/mipmap-xxhdpi/data_bucket.png new file mode 100644 index 0000000..0cff66e --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_bucket.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_car.png b/app/src/main/res/mipmap-xxhdpi/data_car.png new file mode 100644 index 0000000..7cc43fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_car.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_component.png b/app/src/main/res/mipmap-xxhdpi/data_component.png new file mode 100644 index 0000000..98e2b85 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_component.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_dump.png b/app/src/main/res/mipmap-xxhdpi/data_dump.png new file mode 100644 index 0000000..08b91a2 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_dump.png Binary files differ diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } 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 dbfb31b..e8ecc14 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -2,7 +2,8 @@ import androidx.lifecycle.MutableLiveData; -import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.CaseResourceBean; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.model.HighEventBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -20,12 +21,13 @@ public class DataAnalysisViewModel extends BaseViewModel { private final Gson gson = new Gson(); - public MutableLiveData eventSourceModel = new MutableLiveData<>(); + public MutableLiveData cityBaseData = new MutableLiveData<>(); + public MutableLiveData caseResourceData = new MutableLiveData<>(); public MutableLiveData highEventModel = new MutableLiveData<>(); - public void obtainEventSource(String begTime, String endTime) { + public void getCityBaseData() { loadState.setValue(LoadState.Loading); - Observable observable = RetrofitServiceManager.getEventSource(begTime, endTime); + Observable observable = RetrofitServiceManager.getCityBaseData(); ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { @Override public void onCompleted() { @@ -43,9 +45,42 @@ String response = responseBody.string(); int responseCode = StringHelper.separateResponseCode(response); if (responseCode == 200) { - EventSourceBean resultBean = gson.fromJson(response, new TypeToken() { + CityBaseDataBean resultBean = gson.fromJson(response, new TypeToken() { }.getType()); - eventSourceModel.setValue(resultBean); + cityBaseData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getCaseResource(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getCaseResource(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) { + CaseResourceBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + caseResourceData.setValue(resultBean); } else { loadState.setValue(LoadState.Fail); } diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..3916492 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 015123a..671d92b 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,44 +7,96 @@ + layout="@layout/include_base_title" /> - + android:layout_marginHorizontal="@dimen/dp_10" + android:layout_marginTop="@dimen/dp_10" + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml index 91cb65a..ec4b923 100644 --- a/app/src/main/res/layout/activity_city_base_data.xml +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -7,38 +7,12 @@ + layout="@layout/include_base_title" /> - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="2" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_base_city_data_rv_g.xml b/app/src/main/res/layout/item_base_city_data_rv_g.xml new file mode 100644 index 0000000..db8aa89 --- /dev/null +++ b/app/src/main/res/layout/item_base_city_data_rv_g.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_case_resource_lv_l.xml b/app/src/main/res/layout/item_case_resource_lv_l.xml new file mode 100644 index 0000000..fa4dbd4 --- /dev/null +++ b/app/src/main/res/layout/item_case_resource_lv_l.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_recycleview.xml b/app/src/main/res/layout/item_home_recycleview.xml deleted file mode 100644 index b1bb791..0000000 --- a/app/src/main/res/layout/item_home_recycleview.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_rv_g.xml b/app/src/main/res/layout/item_home_rv_g.xml new file mode 100644 index 0000000..b1bb791 --- /dev/null +++ b/app/src/main/res/layout/item_home_rv_g.xml @@ -0,0 +1,32 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/data_bucket.png b/app/src/main/res/mipmap-xxhdpi/data_bucket.png new file mode 100644 index 0000000..0cff66e --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_bucket.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_car.png b/app/src/main/res/mipmap-xxhdpi/data_car.png new file mode 100644 index 0000000..7cc43fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_car.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_component.png b/app/src/main/res/mipmap-xxhdpi/data_component.png new file mode 100644 index 0000000..98e2b85 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_component.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_dump.png b/app/src/main/res/mipmap-xxhdpi/data_dump.png new file mode 100644 index 0000000..08b91a2 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_dump.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_enviroment.png b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png new file mode 100644 index 0000000..a85466b --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png Binary files differ diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } 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 dbfb31b..e8ecc14 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -2,7 +2,8 @@ import androidx.lifecycle.MutableLiveData; -import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.CaseResourceBean; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.model.HighEventBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -20,12 +21,13 @@ public class DataAnalysisViewModel extends BaseViewModel { private final Gson gson = new Gson(); - public MutableLiveData eventSourceModel = new MutableLiveData<>(); + public MutableLiveData cityBaseData = new MutableLiveData<>(); + public MutableLiveData caseResourceData = new MutableLiveData<>(); public MutableLiveData highEventModel = new MutableLiveData<>(); - public void obtainEventSource(String begTime, String endTime) { + public void getCityBaseData() { loadState.setValue(LoadState.Loading); - Observable observable = RetrofitServiceManager.getEventSource(begTime, endTime); + Observable observable = RetrofitServiceManager.getCityBaseData(); ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { @Override public void onCompleted() { @@ -43,9 +45,42 @@ String response = responseBody.string(); int responseCode = StringHelper.separateResponseCode(response); if (responseCode == 200) { - EventSourceBean resultBean = gson.fromJson(response, new TypeToken() { + CityBaseDataBean resultBean = gson.fromJson(response, new TypeToken() { }.getType()); - eventSourceModel.setValue(resultBean); + cityBaseData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getCaseResource(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getCaseResource(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) { + CaseResourceBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + caseResourceData.setValue(resultBean); } else { loadState.setValue(LoadState.Fail); } diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..3916492 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 015123a..671d92b 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,44 +7,96 @@ + layout="@layout/include_base_title" /> - + android:layout_marginHorizontal="@dimen/dp_10" + android:layout_marginTop="@dimen/dp_10" + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml index 91cb65a..ec4b923 100644 --- a/app/src/main/res/layout/activity_city_base_data.xml +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -7,38 +7,12 @@ + layout="@layout/include_base_title" /> - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="2" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_base_city_data_rv_g.xml b/app/src/main/res/layout/item_base_city_data_rv_g.xml new file mode 100644 index 0000000..db8aa89 --- /dev/null +++ b/app/src/main/res/layout/item_base_city_data_rv_g.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_case_resource_lv_l.xml b/app/src/main/res/layout/item_case_resource_lv_l.xml new file mode 100644 index 0000000..fa4dbd4 --- /dev/null +++ b/app/src/main/res/layout/item_case_resource_lv_l.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_recycleview.xml b/app/src/main/res/layout/item_home_recycleview.xml deleted file mode 100644 index b1bb791..0000000 --- a/app/src/main/res/layout/item_home_recycleview.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_rv_g.xml b/app/src/main/res/layout/item_home_rv_g.xml new file mode 100644 index 0000000..b1bb791 --- /dev/null +++ b/app/src/main/res/layout/item_home_rv_g.xml @@ -0,0 +1,32 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/data_bucket.png b/app/src/main/res/mipmap-xxhdpi/data_bucket.png new file mode 100644 index 0000000..0cff66e --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_bucket.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_car.png b/app/src/main/res/mipmap-xxhdpi/data_car.png new file mode 100644 index 0000000..7cc43fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_car.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_component.png b/app/src/main/res/mipmap-xxhdpi/data_component.png new file mode 100644 index 0000000..98e2b85 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_component.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_dump.png b/app/src/main/res/mipmap-xxhdpi/data_dump.png new file mode 100644 index 0000000..08b91a2 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_dump.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_enviroment.png b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png new file mode 100644 index 0000000..a85466b --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_grid.png b/app/src/main/res/mipmap-xxhdpi/data_grid.png new file mode 100644 index 0000000..d5791fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_grid.png Binary files differ diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } 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 dbfb31b..e8ecc14 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -2,7 +2,8 @@ import androidx.lifecycle.MutableLiveData; -import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.CaseResourceBean; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.model.HighEventBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -20,12 +21,13 @@ public class DataAnalysisViewModel extends BaseViewModel { private final Gson gson = new Gson(); - public MutableLiveData eventSourceModel = new MutableLiveData<>(); + public MutableLiveData cityBaseData = new MutableLiveData<>(); + public MutableLiveData caseResourceData = new MutableLiveData<>(); public MutableLiveData highEventModel = new MutableLiveData<>(); - public void obtainEventSource(String begTime, String endTime) { + public void getCityBaseData() { loadState.setValue(LoadState.Loading); - Observable observable = RetrofitServiceManager.getEventSource(begTime, endTime); + Observable observable = RetrofitServiceManager.getCityBaseData(); ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { @Override public void onCompleted() { @@ -43,9 +45,42 @@ String response = responseBody.string(); int responseCode = StringHelper.separateResponseCode(response); if (responseCode == 200) { - EventSourceBean resultBean = gson.fromJson(response, new TypeToken() { + CityBaseDataBean resultBean = gson.fromJson(response, new TypeToken() { }.getType()); - eventSourceModel.setValue(resultBean); + cityBaseData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getCaseResource(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getCaseResource(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) { + CaseResourceBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + caseResourceData.setValue(resultBean); } else { loadState.setValue(LoadState.Fail); } diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..3916492 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 015123a..671d92b 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,44 +7,96 @@ + layout="@layout/include_base_title" /> - + android:layout_marginHorizontal="@dimen/dp_10" + android:layout_marginTop="@dimen/dp_10" + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml index 91cb65a..ec4b923 100644 --- a/app/src/main/res/layout/activity_city_base_data.xml +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -7,38 +7,12 @@ + layout="@layout/include_base_title" /> - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="2" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_base_city_data_rv_g.xml b/app/src/main/res/layout/item_base_city_data_rv_g.xml new file mode 100644 index 0000000..db8aa89 --- /dev/null +++ b/app/src/main/res/layout/item_base_city_data_rv_g.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_case_resource_lv_l.xml b/app/src/main/res/layout/item_case_resource_lv_l.xml new file mode 100644 index 0000000..fa4dbd4 --- /dev/null +++ b/app/src/main/res/layout/item_case_resource_lv_l.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_recycleview.xml b/app/src/main/res/layout/item_home_recycleview.xml deleted file mode 100644 index b1bb791..0000000 --- a/app/src/main/res/layout/item_home_recycleview.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_rv_g.xml b/app/src/main/res/layout/item_home_rv_g.xml new file mode 100644 index 0000000..b1bb791 --- /dev/null +++ b/app/src/main/res/layout/item_home_rv_g.xml @@ -0,0 +1,32 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/data_bucket.png b/app/src/main/res/mipmap-xxhdpi/data_bucket.png new file mode 100644 index 0000000..0cff66e --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_bucket.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_car.png b/app/src/main/res/mipmap-xxhdpi/data_car.png new file mode 100644 index 0000000..7cc43fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_car.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_component.png b/app/src/main/res/mipmap-xxhdpi/data_component.png new file mode 100644 index 0000000..98e2b85 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_component.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_dump.png b/app/src/main/res/mipmap-xxhdpi/data_dump.png new file mode 100644 index 0000000..08b91a2 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_dump.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_enviroment.png b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png new file mode 100644 index 0000000..a85466b --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_grid.png b/app/src/main/res/mipmap-xxhdpi/data_grid.png new file mode 100644 index 0000000..d5791fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_grid.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_light.png b/app/src/main/res/mipmap-xxhdpi/data_light.png new file mode 100644 index 0000000..9f6c0ec --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_light.png Binary files differ diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } 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 dbfb31b..e8ecc14 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -2,7 +2,8 @@ import androidx.lifecycle.MutableLiveData; -import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.CaseResourceBean; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.model.HighEventBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -20,12 +21,13 @@ public class DataAnalysisViewModel extends BaseViewModel { private final Gson gson = new Gson(); - public MutableLiveData eventSourceModel = new MutableLiveData<>(); + public MutableLiveData cityBaseData = new MutableLiveData<>(); + public MutableLiveData caseResourceData = new MutableLiveData<>(); public MutableLiveData highEventModel = new MutableLiveData<>(); - public void obtainEventSource(String begTime, String endTime) { + public void getCityBaseData() { loadState.setValue(LoadState.Loading); - Observable observable = RetrofitServiceManager.getEventSource(begTime, endTime); + Observable observable = RetrofitServiceManager.getCityBaseData(); ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { @Override public void onCompleted() { @@ -43,9 +45,42 @@ String response = responseBody.string(); int responseCode = StringHelper.separateResponseCode(response); if (responseCode == 200) { - EventSourceBean resultBean = gson.fromJson(response, new TypeToken() { + CityBaseDataBean resultBean = gson.fromJson(response, new TypeToken() { }.getType()); - eventSourceModel.setValue(resultBean); + cityBaseData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getCaseResource(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getCaseResource(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) { + CaseResourceBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + caseResourceData.setValue(resultBean); } else { loadState.setValue(LoadState.Fail); } diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..3916492 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 015123a..671d92b 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,44 +7,96 @@ + layout="@layout/include_base_title" /> - + android:layout_marginHorizontal="@dimen/dp_10" + android:layout_marginTop="@dimen/dp_10" + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml index 91cb65a..ec4b923 100644 --- a/app/src/main/res/layout/activity_city_base_data.xml +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -7,38 +7,12 @@ + layout="@layout/include_base_title" /> - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="2" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_base_city_data_rv_g.xml b/app/src/main/res/layout/item_base_city_data_rv_g.xml new file mode 100644 index 0000000..db8aa89 --- /dev/null +++ b/app/src/main/res/layout/item_base_city_data_rv_g.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_case_resource_lv_l.xml b/app/src/main/res/layout/item_case_resource_lv_l.xml new file mode 100644 index 0000000..fa4dbd4 --- /dev/null +++ b/app/src/main/res/layout/item_case_resource_lv_l.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_recycleview.xml b/app/src/main/res/layout/item_home_recycleview.xml deleted file mode 100644 index b1bb791..0000000 --- a/app/src/main/res/layout/item_home_recycleview.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_rv_g.xml b/app/src/main/res/layout/item_home_rv_g.xml new file mode 100644 index 0000000..b1bb791 --- /dev/null +++ b/app/src/main/res/layout/item_home_rv_g.xml @@ -0,0 +1,32 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/data_bucket.png b/app/src/main/res/mipmap-xxhdpi/data_bucket.png new file mode 100644 index 0000000..0cff66e --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_bucket.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_car.png b/app/src/main/res/mipmap-xxhdpi/data_car.png new file mode 100644 index 0000000..7cc43fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_car.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_component.png b/app/src/main/res/mipmap-xxhdpi/data_component.png new file mode 100644 index 0000000..98e2b85 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_component.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_dump.png b/app/src/main/res/mipmap-xxhdpi/data_dump.png new file mode 100644 index 0000000..08b91a2 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_dump.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_enviroment.png b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png new file mode 100644 index 0000000..a85466b --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_grid.png b/app/src/main/res/mipmap-xxhdpi/data_grid.png new file mode 100644 index 0000000..d5791fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_grid.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_light.png b/app/src/main/res/mipmap-xxhdpi/data_light.png new file mode 100644 index 0000000..9f6c0ec --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_light.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_machine.png b/app/src/main/res/mipmap-xxhdpi/data_machine.png new file mode 100644 index 0000000..0509d58 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_machine.png Binary files differ diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } 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 dbfb31b..e8ecc14 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -2,7 +2,8 @@ import androidx.lifecycle.MutableLiveData; -import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.CaseResourceBean; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.model.HighEventBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -20,12 +21,13 @@ public class DataAnalysisViewModel extends BaseViewModel { private final Gson gson = new Gson(); - public MutableLiveData eventSourceModel = new MutableLiveData<>(); + public MutableLiveData cityBaseData = new MutableLiveData<>(); + public MutableLiveData caseResourceData = new MutableLiveData<>(); public MutableLiveData highEventModel = new MutableLiveData<>(); - public void obtainEventSource(String begTime, String endTime) { + public void getCityBaseData() { loadState.setValue(LoadState.Loading); - Observable observable = RetrofitServiceManager.getEventSource(begTime, endTime); + Observable observable = RetrofitServiceManager.getCityBaseData(); ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { @Override public void onCompleted() { @@ -43,9 +45,42 @@ String response = responseBody.string(); int responseCode = StringHelper.separateResponseCode(response); if (responseCode == 200) { - EventSourceBean resultBean = gson.fromJson(response, new TypeToken() { + CityBaseDataBean resultBean = gson.fromJson(response, new TypeToken() { }.getType()); - eventSourceModel.setValue(resultBean); + cityBaseData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getCaseResource(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getCaseResource(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) { + CaseResourceBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + caseResourceData.setValue(resultBean); } else { loadState.setValue(LoadState.Fail); } diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..3916492 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 015123a..671d92b 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,44 +7,96 @@ + layout="@layout/include_base_title" /> - + android:layout_marginHorizontal="@dimen/dp_10" + android:layout_marginTop="@dimen/dp_10" + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml index 91cb65a..ec4b923 100644 --- a/app/src/main/res/layout/activity_city_base_data.xml +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -7,38 +7,12 @@ + layout="@layout/include_base_title" /> - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="2" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_base_city_data_rv_g.xml b/app/src/main/res/layout/item_base_city_data_rv_g.xml new file mode 100644 index 0000000..db8aa89 --- /dev/null +++ b/app/src/main/res/layout/item_base_city_data_rv_g.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_case_resource_lv_l.xml b/app/src/main/res/layout/item_case_resource_lv_l.xml new file mode 100644 index 0000000..fa4dbd4 --- /dev/null +++ b/app/src/main/res/layout/item_case_resource_lv_l.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_recycleview.xml b/app/src/main/res/layout/item_home_recycleview.xml deleted file mode 100644 index b1bb791..0000000 --- a/app/src/main/res/layout/item_home_recycleview.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_rv_g.xml b/app/src/main/res/layout/item_home_rv_g.xml new file mode 100644 index 0000000..b1bb791 --- /dev/null +++ b/app/src/main/res/layout/item_home_rv_g.xml @@ -0,0 +1,32 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/data_bucket.png b/app/src/main/res/mipmap-xxhdpi/data_bucket.png new file mode 100644 index 0000000..0cff66e --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_bucket.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_car.png b/app/src/main/res/mipmap-xxhdpi/data_car.png new file mode 100644 index 0000000..7cc43fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_car.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_component.png b/app/src/main/res/mipmap-xxhdpi/data_component.png new file mode 100644 index 0000000..98e2b85 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_component.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_dump.png b/app/src/main/res/mipmap-xxhdpi/data_dump.png new file mode 100644 index 0000000..08b91a2 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_dump.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_enviroment.png b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png new file mode 100644 index 0000000..a85466b --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_grid.png b/app/src/main/res/mipmap-xxhdpi/data_grid.png new file mode 100644 index 0000000..d5791fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_grid.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_light.png b/app/src/main/res/mipmap-xxhdpi/data_light.png new file mode 100644 index 0000000..9f6c0ec --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_light.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_machine.png b/app/src/main/res/mipmap-xxhdpi/data_machine.png new file mode 100644 index 0000000..0509d58 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_machine.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_pipeline.png b/app/src/main/res/mipmap-xxhdpi/data_pipeline.png new file mode 100644 index 0000000..130dabc --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_pipeline.png Binary files differ diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } 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 dbfb31b..e8ecc14 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -2,7 +2,8 @@ import androidx.lifecycle.MutableLiveData; -import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.CaseResourceBean; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.model.HighEventBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -20,12 +21,13 @@ public class DataAnalysisViewModel extends BaseViewModel { private final Gson gson = new Gson(); - public MutableLiveData eventSourceModel = new MutableLiveData<>(); + public MutableLiveData cityBaseData = new MutableLiveData<>(); + public MutableLiveData caseResourceData = new MutableLiveData<>(); public MutableLiveData highEventModel = new MutableLiveData<>(); - public void obtainEventSource(String begTime, String endTime) { + public void getCityBaseData() { loadState.setValue(LoadState.Loading); - Observable observable = RetrofitServiceManager.getEventSource(begTime, endTime); + Observable observable = RetrofitServiceManager.getCityBaseData(); ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { @Override public void onCompleted() { @@ -43,9 +45,42 @@ String response = responseBody.string(); int responseCode = StringHelper.separateResponseCode(response); if (responseCode == 200) { - EventSourceBean resultBean = gson.fromJson(response, new TypeToken() { + CityBaseDataBean resultBean = gson.fromJson(response, new TypeToken() { }.getType()); - eventSourceModel.setValue(resultBean); + cityBaseData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getCaseResource(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getCaseResource(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) { + CaseResourceBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + caseResourceData.setValue(resultBean); } else { loadState.setValue(LoadState.Fail); } diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..3916492 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 015123a..671d92b 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,44 +7,96 @@ + layout="@layout/include_base_title" /> - + android:layout_marginHorizontal="@dimen/dp_10" + android:layout_marginTop="@dimen/dp_10" + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml index 91cb65a..ec4b923 100644 --- a/app/src/main/res/layout/activity_city_base_data.xml +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -7,38 +7,12 @@ + layout="@layout/include_base_title" /> - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="2" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_base_city_data_rv_g.xml b/app/src/main/res/layout/item_base_city_data_rv_g.xml new file mode 100644 index 0000000..db8aa89 --- /dev/null +++ b/app/src/main/res/layout/item_base_city_data_rv_g.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_case_resource_lv_l.xml b/app/src/main/res/layout/item_case_resource_lv_l.xml new file mode 100644 index 0000000..fa4dbd4 --- /dev/null +++ b/app/src/main/res/layout/item_case_resource_lv_l.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_recycleview.xml b/app/src/main/res/layout/item_home_recycleview.xml deleted file mode 100644 index b1bb791..0000000 --- a/app/src/main/res/layout/item_home_recycleview.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_rv_g.xml b/app/src/main/res/layout/item_home_rv_g.xml new file mode 100644 index 0000000..b1bb791 --- /dev/null +++ b/app/src/main/res/layout/item_home_rv_g.xml @@ -0,0 +1,32 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/data_bucket.png b/app/src/main/res/mipmap-xxhdpi/data_bucket.png new file mode 100644 index 0000000..0cff66e --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_bucket.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_car.png b/app/src/main/res/mipmap-xxhdpi/data_car.png new file mode 100644 index 0000000..7cc43fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_car.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_component.png b/app/src/main/res/mipmap-xxhdpi/data_component.png new file mode 100644 index 0000000..98e2b85 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_component.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_dump.png b/app/src/main/res/mipmap-xxhdpi/data_dump.png new file mode 100644 index 0000000..08b91a2 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_dump.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_enviroment.png b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png new file mode 100644 index 0000000..a85466b --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_grid.png b/app/src/main/res/mipmap-xxhdpi/data_grid.png new file mode 100644 index 0000000..d5791fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_grid.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_light.png b/app/src/main/res/mipmap-xxhdpi/data_light.png new file mode 100644 index 0000000..9f6c0ec --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_light.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_machine.png b/app/src/main/res/mipmap-xxhdpi/data_machine.png new file mode 100644 index 0000000..0509d58 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_machine.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_pipeline.png b/app/src/main/res/mipmap-xxhdpi/data_pipeline.png new file mode 100644 index 0000000..130dabc --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_pipeline.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_shop.png b/app/src/main/res/mipmap-xxhdpi/data_shop.png new file mode 100644 index 0000000..93c41a1 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_shop.png Binary files differ diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } 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 dbfb31b..e8ecc14 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -2,7 +2,8 @@ import androidx.lifecycle.MutableLiveData; -import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.CaseResourceBean; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.model.HighEventBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -20,12 +21,13 @@ public class DataAnalysisViewModel extends BaseViewModel { private final Gson gson = new Gson(); - public MutableLiveData eventSourceModel = new MutableLiveData<>(); + public MutableLiveData cityBaseData = new MutableLiveData<>(); + public MutableLiveData caseResourceData = new MutableLiveData<>(); public MutableLiveData highEventModel = new MutableLiveData<>(); - public void obtainEventSource(String begTime, String endTime) { + public void getCityBaseData() { loadState.setValue(LoadState.Loading); - Observable observable = RetrofitServiceManager.getEventSource(begTime, endTime); + Observable observable = RetrofitServiceManager.getCityBaseData(); ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { @Override public void onCompleted() { @@ -43,9 +45,42 @@ String response = responseBody.string(); int responseCode = StringHelper.separateResponseCode(response); if (responseCode == 200) { - EventSourceBean resultBean = gson.fromJson(response, new TypeToken() { + CityBaseDataBean resultBean = gson.fromJson(response, new TypeToken() { }.getType()); - eventSourceModel.setValue(resultBean); + cityBaseData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getCaseResource(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getCaseResource(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) { + CaseResourceBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + caseResourceData.setValue(resultBean); } else { loadState.setValue(LoadState.Fail); } diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..3916492 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 015123a..671d92b 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,44 +7,96 @@ + layout="@layout/include_base_title" /> - + android:layout_marginHorizontal="@dimen/dp_10" + android:layout_marginTop="@dimen/dp_10" + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml index 91cb65a..ec4b923 100644 --- a/app/src/main/res/layout/activity_city_base_data.xml +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -7,38 +7,12 @@ + layout="@layout/include_base_title" /> - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="2" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_base_city_data_rv_g.xml b/app/src/main/res/layout/item_base_city_data_rv_g.xml new file mode 100644 index 0000000..db8aa89 --- /dev/null +++ b/app/src/main/res/layout/item_base_city_data_rv_g.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_case_resource_lv_l.xml b/app/src/main/res/layout/item_case_resource_lv_l.xml new file mode 100644 index 0000000..fa4dbd4 --- /dev/null +++ b/app/src/main/res/layout/item_case_resource_lv_l.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_recycleview.xml b/app/src/main/res/layout/item_home_recycleview.xml deleted file mode 100644 index b1bb791..0000000 --- a/app/src/main/res/layout/item_home_recycleview.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_rv_g.xml b/app/src/main/res/layout/item_home_rv_g.xml new file mode 100644 index 0000000..b1bb791 --- /dev/null +++ b/app/src/main/res/layout/item_home_rv_g.xml @@ -0,0 +1,32 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/data_bucket.png b/app/src/main/res/mipmap-xxhdpi/data_bucket.png new file mode 100644 index 0000000..0cff66e --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_bucket.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_car.png b/app/src/main/res/mipmap-xxhdpi/data_car.png new file mode 100644 index 0000000..7cc43fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_car.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_component.png b/app/src/main/res/mipmap-xxhdpi/data_component.png new file mode 100644 index 0000000..98e2b85 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_component.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_dump.png b/app/src/main/res/mipmap-xxhdpi/data_dump.png new file mode 100644 index 0000000..08b91a2 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_dump.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_enviroment.png b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png new file mode 100644 index 0000000..a85466b --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_grid.png b/app/src/main/res/mipmap-xxhdpi/data_grid.png new file mode 100644 index 0000000..d5791fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_grid.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_light.png b/app/src/main/res/mipmap-xxhdpi/data_light.png new file mode 100644 index 0000000..9f6c0ec --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_light.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_machine.png b/app/src/main/res/mipmap-xxhdpi/data_machine.png new file mode 100644 index 0000000..0509d58 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_machine.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_pipeline.png b/app/src/main/res/mipmap-xxhdpi/data_pipeline.png new file mode 100644 index 0000000..130dabc --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_pipeline.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_shop.png b/app/src/main/res/mipmap-xxhdpi/data_shop.png new file mode 100644 index 0000000..93c41a1 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_shop.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_video.png b/app/src/main/res/mipmap-xxhdpi/data_video.png new file mode 100644 index 0000000..9d4dff8 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_video.png Binary files differ diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } 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 dbfb31b..e8ecc14 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -2,7 +2,8 @@ import androidx.lifecycle.MutableLiveData; -import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.CaseResourceBean; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.model.HighEventBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -20,12 +21,13 @@ public class DataAnalysisViewModel extends BaseViewModel { private final Gson gson = new Gson(); - public MutableLiveData eventSourceModel = new MutableLiveData<>(); + public MutableLiveData cityBaseData = new MutableLiveData<>(); + public MutableLiveData caseResourceData = new MutableLiveData<>(); public MutableLiveData highEventModel = new MutableLiveData<>(); - public void obtainEventSource(String begTime, String endTime) { + public void getCityBaseData() { loadState.setValue(LoadState.Loading); - Observable observable = RetrofitServiceManager.getEventSource(begTime, endTime); + Observable observable = RetrofitServiceManager.getCityBaseData(); ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { @Override public void onCompleted() { @@ -43,9 +45,42 @@ String response = responseBody.string(); int responseCode = StringHelper.separateResponseCode(response); if (responseCode == 200) { - EventSourceBean resultBean = gson.fromJson(response, new TypeToken() { + CityBaseDataBean resultBean = gson.fromJson(response, new TypeToken() { }.getType()); - eventSourceModel.setValue(resultBean); + cityBaseData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getCaseResource(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getCaseResource(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) { + CaseResourceBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + caseResourceData.setValue(resultBean); } else { loadState.setValue(LoadState.Fail); } diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..3916492 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 015123a..671d92b 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,44 +7,96 @@ + layout="@layout/include_base_title" /> - + android:layout_marginHorizontal="@dimen/dp_10" + android:layout_marginTop="@dimen/dp_10" + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml index 91cb65a..ec4b923 100644 --- a/app/src/main/res/layout/activity_city_base_data.xml +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -7,38 +7,12 @@ + layout="@layout/include_base_title" /> - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="2" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_base_city_data_rv_g.xml b/app/src/main/res/layout/item_base_city_data_rv_g.xml new file mode 100644 index 0000000..db8aa89 --- /dev/null +++ b/app/src/main/res/layout/item_base_city_data_rv_g.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_case_resource_lv_l.xml b/app/src/main/res/layout/item_case_resource_lv_l.xml new file mode 100644 index 0000000..fa4dbd4 --- /dev/null +++ b/app/src/main/res/layout/item_case_resource_lv_l.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_recycleview.xml b/app/src/main/res/layout/item_home_recycleview.xml deleted file mode 100644 index b1bb791..0000000 --- a/app/src/main/res/layout/item_home_recycleview.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_rv_g.xml b/app/src/main/res/layout/item_home_rv_g.xml new file mode 100644 index 0000000..b1bb791 --- /dev/null +++ b/app/src/main/res/layout/item_home_rv_g.xml @@ -0,0 +1,32 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/data_bucket.png b/app/src/main/res/mipmap-xxhdpi/data_bucket.png new file mode 100644 index 0000000..0cff66e --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_bucket.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_car.png b/app/src/main/res/mipmap-xxhdpi/data_car.png new file mode 100644 index 0000000..7cc43fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_car.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_component.png b/app/src/main/res/mipmap-xxhdpi/data_component.png new file mode 100644 index 0000000..98e2b85 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_component.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_dump.png b/app/src/main/res/mipmap-xxhdpi/data_dump.png new file mode 100644 index 0000000..08b91a2 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_dump.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_enviroment.png b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png new file mode 100644 index 0000000..a85466b --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_grid.png b/app/src/main/res/mipmap-xxhdpi/data_grid.png new file mode 100644 index 0000000..d5791fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_grid.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_light.png b/app/src/main/res/mipmap-xxhdpi/data_light.png new file mode 100644 index 0000000..9f6c0ec --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_light.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_machine.png b/app/src/main/res/mipmap-xxhdpi/data_machine.png new file mode 100644 index 0000000..0509d58 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_machine.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_pipeline.png b/app/src/main/res/mipmap-xxhdpi/data_pipeline.png new file mode 100644 index 0000000..130dabc --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_pipeline.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_shop.png b/app/src/main/res/mipmap-xxhdpi/data_shop.png new file mode 100644 index 0000000..93c41a1 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_shop.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_video.png b/app/src/main/res/mipmap-xxhdpi/data_video.png new file mode 100644 index 0000000..9d4dff8 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_video.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_wc.png b/app/src/main/res/mipmap-xxhdpi/data_wc.png new file mode 100644 index 0000000..f82f84e --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_wc.png Binary files differ diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } 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 dbfb31b..e8ecc14 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -2,7 +2,8 @@ import androidx.lifecycle.MutableLiveData; -import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.CaseResourceBean; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.model.HighEventBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -20,12 +21,13 @@ public class DataAnalysisViewModel extends BaseViewModel { private final Gson gson = new Gson(); - public MutableLiveData eventSourceModel = new MutableLiveData<>(); + public MutableLiveData cityBaseData = new MutableLiveData<>(); + public MutableLiveData caseResourceData = new MutableLiveData<>(); public MutableLiveData highEventModel = new MutableLiveData<>(); - public void obtainEventSource(String begTime, String endTime) { + public void getCityBaseData() { loadState.setValue(LoadState.Loading); - Observable observable = RetrofitServiceManager.getEventSource(begTime, endTime); + Observable observable = RetrofitServiceManager.getCityBaseData(); ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { @Override public void onCompleted() { @@ -43,9 +45,42 @@ String response = responseBody.string(); int responseCode = StringHelper.separateResponseCode(response); if (responseCode == 200) { - EventSourceBean resultBean = gson.fromJson(response, new TypeToken() { + CityBaseDataBean resultBean = gson.fromJson(response, new TypeToken() { }.getType()); - eventSourceModel.setValue(resultBean); + cityBaseData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getCaseResource(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getCaseResource(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) { + CaseResourceBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + caseResourceData.setValue(resultBean); } else { loadState.setValue(LoadState.Fail); } diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..3916492 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 015123a..671d92b 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,44 +7,96 @@ + layout="@layout/include_base_title" /> - + android:layout_marginHorizontal="@dimen/dp_10" + android:layout_marginTop="@dimen/dp_10" + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml index 91cb65a..ec4b923 100644 --- a/app/src/main/res/layout/activity_city_base_data.xml +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -7,38 +7,12 @@ + layout="@layout/include_base_title" /> - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="2" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_base_city_data_rv_g.xml b/app/src/main/res/layout/item_base_city_data_rv_g.xml new file mode 100644 index 0000000..db8aa89 --- /dev/null +++ b/app/src/main/res/layout/item_base_city_data_rv_g.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_case_resource_lv_l.xml b/app/src/main/res/layout/item_case_resource_lv_l.xml new file mode 100644 index 0000000..fa4dbd4 --- /dev/null +++ b/app/src/main/res/layout/item_case_resource_lv_l.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_recycleview.xml b/app/src/main/res/layout/item_home_recycleview.xml deleted file mode 100644 index b1bb791..0000000 --- a/app/src/main/res/layout/item_home_recycleview.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_rv_g.xml b/app/src/main/res/layout/item_home_rv_g.xml new file mode 100644 index 0000000..b1bb791 --- /dev/null +++ b/app/src/main/res/layout/item_home_rv_g.xml @@ -0,0 +1,32 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/data_bucket.png b/app/src/main/res/mipmap-xxhdpi/data_bucket.png new file mode 100644 index 0000000..0cff66e --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_bucket.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_car.png b/app/src/main/res/mipmap-xxhdpi/data_car.png new file mode 100644 index 0000000..7cc43fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_car.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_component.png b/app/src/main/res/mipmap-xxhdpi/data_component.png new file mode 100644 index 0000000..98e2b85 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_component.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_dump.png b/app/src/main/res/mipmap-xxhdpi/data_dump.png new file mode 100644 index 0000000..08b91a2 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_dump.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_enviroment.png b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png new file mode 100644 index 0000000..a85466b --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_grid.png b/app/src/main/res/mipmap-xxhdpi/data_grid.png new file mode 100644 index 0000000..d5791fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_grid.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_light.png b/app/src/main/res/mipmap-xxhdpi/data_light.png new file mode 100644 index 0000000..9f6c0ec --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_light.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_machine.png b/app/src/main/res/mipmap-xxhdpi/data_machine.png new file mode 100644 index 0000000..0509d58 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_machine.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_pipeline.png b/app/src/main/res/mipmap-xxhdpi/data_pipeline.png new file mode 100644 index 0000000..130dabc --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_pipeline.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_shop.png b/app/src/main/res/mipmap-xxhdpi/data_shop.png new file mode 100644 index 0000000..93c41a1 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_shop.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_video.png b/app/src/main/res/mipmap-xxhdpi/data_video.png new file mode 100644 index 0000000..9d4dff8 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_video.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_wc.png b/app/src/main/res/mipmap-xxhdpi/data_wc.png new file mode 100644 index 0000000..f82f84e --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_wc.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_work.png b/app/src/main/res/mipmap-xxhdpi/data_work.png new file mode 100644 index 0000000..3b3db13 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_work.png Binary files differ diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } 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 dbfb31b..e8ecc14 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -2,7 +2,8 @@ import androidx.lifecycle.MutableLiveData; -import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.CaseResourceBean; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.model.HighEventBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -20,12 +21,13 @@ public class DataAnalysisViewModel extends BaseViewModel { private final Gson gson = new Gson(); - public MutableLiveData eventSourceModel = new MutableLiveData<>(); + public MutableLiveData cityBaseData = new MutableLiveData<>(); + public MutableLiveData caseResourceData = new MutableLiveData<>(); public MutableLiveData highEventModel = new MutableLiveData<>(); - public void obtainEventSource(String begTime, String endTime) { + public void getCityBaseData() { loadState.setValue(LoadState.Loading); - Observable observable = RetrofitServiceManager.getEventSource(begTime, endTime); + Observable observable = RetrofitServiceManager.getCityBaseData(); ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { @Override public void onCompleted() { @@ -43,9 +45,42 @@ String response = responseBody.string(); int responseCode = StringHelper.separateResponseCode(response); if (responseCode == 200) { - EventSourceBean resultBean = gson.fromJson(response, new TypeToken() { + CityBaseDataBean resultBean = gson.fromJson(response, new TypeToken() { }.getType()); - eventSourceModel.setValue(resultBean); + cityBaseData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getCaseResource(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getCaseResource(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) { + CaseResourceBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + caseResourceData.setValue(resultBean); } else { loadState.setValue(LoadState.Fail); } diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..3916492 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 015123a..671d92b 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,44 +7,96 @@ + layout="@layout/include_base_title" /> - + android:layout_marginHorizontal="@dimen/dp_10" + android:layout_marginTop="@dimen/dp_10" + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml index 91cb65a..ec4b923 100644 --- a/app/src/main/res/layout/activity_city_base_data.xml +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -7,38 +7,12 @@ + layout="@layout/include_base_title" /> - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="2" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_base_city_data_rv_g.xml b/app/src/main/res/layout/item_base_city_data_rv_g.xml new file mode 100644 index 0000000..db8aa89 --- /dev/null +++ b/app/src/main/res/layout/item_base_city_data_rv_g.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_case_resource_lv_l.xml b/app/src/main/res/layout/item_case_resource_lv_l.xml new file mode 100644 index 0000000..fa4dbd4 --- /dev/null +++ b/app/src/main/res/layout/item_case_resource_lv_l.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_recycleview.xml b/app/src/main/res/layout/item_home_recycleview.xml deleted file mode 100644 index b1bb791..0000000 --- a/app/src/main/res/layout/item_home_recycleview.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_rv_g.xml b/app/src/main/res/layout/item_home_rv_g.xml new file mode 100644 index 0000000..b1bb791 --- /dev/null +++ b/app/src/main/res/layout/item_home_rv_g.xml @@ -0,0 +1,32 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/data_bucket.png b/app/src/main/res/mipmap-xxhdpi/data_bucket.png new file mode 100644 index 0000000..0cff66e --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_bucket.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_car.png b/app/src/main/res/mipmap-xxhdpi/data_car.png new file mode 100644 index 0000000..7cc43fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_car.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_component.png b/app/src/main/res/mipmap-xxhdpi/data_component.png new file mode 100644 index 0000000..98e2b85 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_component.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_dump.png b/app/src/main/res/mipmap-xxhdpi/data_dump.png new file mode 100644 index 0000000..08b91a2 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_dump.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_enviroment.png b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png new file mode 100644 index 0000000..a85466b --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_grid.png b/app/src/main/res/mipmap-xxhdpi/data_grid.png new file mode 100644 index 0000000..d5791fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_grid.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_light.png b/app/src/main/res/mipmap-xxhdpi/data_light.png new file mode 100644 index 0000000..9f6c0ec --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_light.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_machine.png b/app/src/main/res/mipmap-xxhdpi/data_machine.png new file mode 100644 index 0000000..0509d58 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_machine.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_pipeline.png b/app/src/main/res/mipmap-xxhdpi/data_pipeline.png new file mode 100644 index 0000000..130dabc --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_pipeline.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_shop.png b/app/src/main/res/mipmap-xxhdpi/data_shop.png new file mode 100644 index 0000000..93c41a1 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_shop.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_video.png b/app/src/main/res/mipmap-xxhdpi/data_video.png new file mode 100644 index 0000000..9d4dff8 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_video.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_wc.png b/app/src/main/res/mipmap-xxhdpi/data_wc.png new file mode 100644 index 0000000..f82f84e --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_wc.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_work.png b/app/src/main/res/mipmap-xxhdpi/data_work.png new file mode 100644 index 0000000..3b3db13 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_work.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_worker.png b/app/src/main/res/mipmap-xxhdpi/data_worker.png new file mode 100644 index 0000000..f08f6bf --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_worker.png Binary files differ diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } 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 dbfb31b..e8ecc14 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -2,7 +2,8 @@ import androidx.lifecycle.MutableLiveData; -import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.CaseResourceBean; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.model.HighEventBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -20,12 +21,13 @@ public class DataAnalysisViewModel extends BaseViewModel { private final Gson gson = new Gson(); - public MutableLiveData eventSourceModel = new MutableLiveData<>(); + public MutableLiveData cityBaseData = new MutableLiveData<>(); + public MutableLiveData caseResourceData = new MutableLiveData<>(); public MutableLiveData highEventModel = new MutableLiveData<>(); - public void obtainEventSource(String begTime, String endTime) { + public void getCityBaseData() { loadState.setValue(LoadState.Loading); - Observable observable = RetrofitServiceManager.getEventSource(begTime, endTime); + Observable observable = RetrofitServiceManager.getCityBaseData(); ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { @Override public void onCompleted() { @@ -43,9 +45,42 @@ String response = responseBody.string(); int responseCode = StringHelper.separateResponseCode(response); if (responseCode == 200) { - EventSourceBean resultBean = gson.fromJson(response, new TypeToken() { + CityBaseDataBean resultBean = gson.fromJson(response, new TypeToken() { }.getType()); - eventSourceModel.setValue(resultBean); + cityBaseData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getCaseResource(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getCaseResource(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) { + CaseResourceBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + caseResourceData.setValue(resultBean); } else { loadState.setValue(LoadState.Fail); } diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..3916492 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 015123a..671d92b 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,44 +7,96 @@ + layout="@layout/include_base_title" /> - + android:layout_marginHorizontal="@dimen/dp_10" + android:layout_marginTop="@dimen/dp_10" + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml index 91cb65a..ec4b923 100644 --- a/app/src/main/res/layout/activity_city_base_data.xml +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -7,38 +7,12 @@ + layout="@layout/include_base_title" /> - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="2" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_base_city_data_rv_g.xml b/app/src/main/res/layout/item_base_city_data_rv_g.xml new file mode 100644 index 0000000..db8aa89 --- /dev/null +++ b/app/src/main/res/layout/item_base_city_data_rv_g.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_case_resource_lv_l.xml b/app/src/main/res/layout/item_case_resource_lv_l.xml new file mode 100644 index 0000000..fa4dbd4 --- /dev/null +++ b/app/src/main/res/layout/item_case_resource_lv_l.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_recycleview.xml b/app/src/main/res/layout/item_home_recycleview.xml deleted file mode 100644 index b1bb791..0000000 --- a/app/src/main/res/layout/item_home_recycleview.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_rv_g.xml b/app/src/main/res/layout/item_home_rv_g.xml new file mode 100644 index 0000000..b1bb791 --- /dev/null +++ b/app/src/main/res/layout/item_home_rv_g.xml @@ -0,0 +1,32 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/data_bucket.png b/app/src/main/res/mipmap-xxhdpi/data_bucket.png new file mode 100644 index 0000000..0cff66e --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_bucket.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_car.png b/app/src/main/res/mipmap-xxhdpi/data_car.png new file mode 100644 index 0000000..7cc43fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_car.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_component.png b/app/src/main/res/mipmap-xxhdpi/data_component.png new file mode 100644 index 0000000..98e2b85 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_component.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_dump.png b/app/src/main/res/mipmap-xxhdpi/data_dump.png new file mode 100644 index 0000000..08b91a2 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_dump.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_enviroment.png b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png new file mode 100644 index 0000000..a85466b --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_grid.png b/app/src/main/res/mipmap-xxhdpi/data_grid.png new file mode 100644 index 0000000..d5791fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_grid.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_light.png b/app/src/main/res/mipmap-xxhdpi/data_light.png new file mode 100644 index 0000000..9f6c0ec --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_light.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_machine.png b/app/src/main/res/mipmap-xxhdpi/data_machine.png new file mode 100644 index 0000000..0509d58 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_machine.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_pipeline.png b/app/src/main/res/mipmap-xxhdpi/data_pipeline.png new file mode 100644 index 0000000..130dabc --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_pipeline.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_shop.png b/app/src/main/res/mipmap-xxhdpi/data_shop.png new file mode 100644 index 0000000..93c41a1 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_shop.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_video.png b/app/src/main/res/mipmap-xxhdpi/data_video.png new file mode 100644 index 0000000..9d4dff8 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_video.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_wc.png b/app/src/main/res/mipmap-xxhdpi/data_wc.png new file mode 100644 index 0000000..f82f84e --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_wc.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_work.png b/app/src/main/res/mipmap-xxhdpi/data_work.png new file mode 100644 index 0000000..3b3db13 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_work.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_worker.png b/app/src/main/res/mipmap-xxhdpi/data_worker.png new file mode 100644 index 0000000..f08f6bf --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_worker.png Binary files differ diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 7c69971..32f5776 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -15,7 +15,7 @@ #000000 #FF0000 - #1D55C6 + #FF1D55C6 #333333 #626262 #F7F7FA @@ -32,10 +32,70 @@ #F1F1F1 + + #E4ECFF + #60A5FF + #DCF7FE + #3CCCE3 + #D8F7F1 + #3CCCE3 + #FDF7E9 + #F9C477 + - #FF6969 - #CDA5FF - #C3EB87 - #9BFFFF - #FFFF00 + #E57373 + #EF5350 + #F44336 + #E53935 + #D32F2F + #C62828 + #B71C1C + + #FFB74D + #FFA726 + #FF9800 + #FB8C00 + #F57C00 + #EF6C00 + #E65100 + + #FFF176 + #FFEE58 + #FFEB3B + #FDD835 + #FBC02D + #F9A825 + #F57F17 + + #81C784 + #66BB6A + #4CAF50 + #43A047 + #388E3C + #2E7D32 + #1B5E20 + + #4DD0E1 + #26C6DA + #00BCD4 + #00ACC1 + #0097A7 + #00838F + #006064 + + #64B5F6 + #42A5F5 + #2196F3 + #1E88E5 + #1976D2 + #1565C0 + #0D47A1 + + #BA68C8 + #AB47BC + #9C27B0 + #8E24AA + #7B1FA2 + #6A1B9A + #4A148C diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } 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 dbfb31b..e8ecc14 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -2,7 +2,8 @@ import androidx.lifecycle.MutableLiveData; -import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.CaseResourceBean; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.model.HighEventBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -20,12 +21,13 @@ public class DataAnalysisViewModel extends BaseViewModel { private final Gson gson = new Gson(); - public MutableLiveData eventSourceModel = new MutableLiveData<>(); + public MutableLiveData cityBaseData = new MutableLiveData<>(); + public MutableLiveData caseResourceData = new MutableLiveData<>(); public MutableLiveData highEventModel = new MutableLiveData<>(); - public void obtainEventSource(String begTime, String endTime) { + public void getCityBaseData() { loadState.setValue(LoadState.Loading); - Observable observable = RetrofitServiceManager.getEventSource(begTime, endTime); + Observable observable = RetrofitServiceManager.getCityBaseData(); ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { @Override public void onCompleted() { @@ -43,9 +45,42 @@ String response = responseBody.string(); int responseCode = StringHelper.separateResponseCode(response); if (responseCode == 200) { - EventSourceBean resultBean = gson.fromJson(response, new TypeToken() { + CityBaseDataBean resultBean = gson.fromJson(response, new TypeToken() { }.getType()); - eventSourceModel.setValue(resultBean); + cityBaseData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getCaseResource(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getCaseResource(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) { + CaseResourceBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + caseResourceData.setValue(resultBean); } else { loadState.setValue(LoadState.Fail); } diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..3916492 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 015123a..671d92b 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,44 +7,96 @@ + layout="@layout/include_base_title" /> - + android:layout_marginHorizontal="@dimen/dp_10" + android:layout_marginTop="@dimen/dp_10" + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml index 91cb65a..ec4b923 100644 --- a/app/src/main/res/layout/activity_city_base_data.xml +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -7,38 +7,12 @@ + layout="@layout/include_base_title" /> - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="2" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_base_city_data_rv_g.xml b/app/src/main/res/layout/item_base_city_data_rv_g.xml new file mode 100644 index 0000000..db8aa89 --- /dev/null +++ b/app/src/main/res/layout/item_base_city_data_rv_g.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_case_resource_lv_l.xml b/app/src/main/res/layout/item_case_resource_lv_l.xml new file mode 100644 index 0000000..fa4dbd4 --- /dev/null +++ b/app/src/main/res/layout/item_case_resource_lv_l.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_recycleview.xml b/app/src/main/res/layout/item_home_recycleview.xml deleted file mode 100644 index b1bb791..0000000 --- a/app/src/main/res/layout/item_home_recycleview.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_rv_g.xml b/app/src/main/res/layout/item_home_rv_g.xml new file mode 100644 index 0000000..b1bb791 --- /dev/null +++ b/app/src/main/res/layout/item_home_rv_g.xml @@ -0,0 +1,32 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/data_bucket.png b/app/src/main/res/mipmap-xxhdpi/data_bucket.png new file mode 100644 index 0000000..0cff66e --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_bucket.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_car.png b/app/src/main/res/mipmap-xxhdpi/data_car.png new file mode 100644 index 0000000..7cc43fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_car.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_component.png b/app/src/main/res/mipmap-xxhdpi/data_component.png new file mode 100644 index 0000000..98e2b85 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_component.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_dump.png b/app/src/main/res/mipmap-xxhdpi/data_dump.png new file mode 100644 index 0000000..08b91a2 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_dump.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_enviroment.png b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png new file mode 100644 index 0000000..a85466b --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_grid.png b/app/src/main/res/mipmap-xxhdpi/data_grid.png new file mode 100644 index 0000000..d5791fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_grid.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_light.png b/app/src/main/res/mipmap-xxhdpi/data_light.png new file mode 100644 index 0000000..9f6c0ec --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_light.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_machine.png b/app/src/main/res/mipmap-xxhdpi/data_machine.png new file mode 100644 index 0000000..0509d58 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_machine.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_pipeline.png b/app/src/main/res/mipmap-xxhdpi/data_pipeline.png new file mode 100644 index 0000000..130dabc --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_pipeline.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_shop.png b/app/src/main/res/mipmap-xxhdpi/data_shop.png new file mode 100644 index 0000000..93c41a1 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_shop.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_video.png b/app/src/main/res/mipmap-xxhdpi/data_video.png new file mode 100644 index 0000000..9d4dff8 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_video.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_wc.png b/app/src/main/res/mipmap-xxhdpi/data_wc.png new file mode 100644 index 0000000..f82f84e --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_wc.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_work.png b/app/src/main/res/mipmap-xxhdpi/data_work.png new file mode 100644 index 0000000..3b3db13 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_work.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_worker.png b/app/src/main/res/mipmap-xxhdpi/data_worker.png new file mode 100644 index 0000000..f08f6bf --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_worker.png Binary files differ diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 7c69971..32f5776 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -15,7 +15,7 @@ #000000 #FF0000 - #1D55C6 + #FF1D55C6 #333333 #626262 #F7F7FA @@ -32,10 +32,70 @@ #F1F1F1 + + #E4ECFF + #60A5FF + #DCF7FE + #3CCCE3 + #D8F7F1 + #3CCCE3 + #FDF7E9 + #F9C477 + - #FF6969 - #CDA5FF - #C3EB87 - #9BFFFF - #FFFF00 + #E57373 + #EF5350 + #F44336 + #E53935 + #D32F2F + #C62828 + #B71C1C + + #FFB74D + #FFA726 + #FF9800 + #FB8C00 + #F57C00 + #EF6C00 + #E65100 + + #FFF176 + #FFEE58 + #FFEB3B + #FDD835 + #FBC02D + #F9A825 + #F57F17 + + #81C784 + #66BB6A + #4CAF50 + #43A047 + #388E3C + #2E7D32 + #1B5E20 + + #4DD0E1 + #26C6DA + #00BCD4 + #00ACC1 + #0097A7 + #00838F + #006064 + + #64B5F6 + #42A5F5 + #2196F3 + #1E88E5 + #1976D2 + #1565C0 + #0D47A1 + + #BA68C8 + #AB47BC + #9C27B0 + #8E24AA + #7B1FA2 + #6A1B9A + #4A148C diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 3d0040f..3cc24c1 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -8,21 +8,31 @@ 22sp 45sp - + + 1dp + 2dp 3dp 5dp 7dp 10dp + 15dp 20dp 25dp 30dp 32dp + 35dp 40dp + 45dp 50dp + 55dp + 60dp + 70dp + 75dp 80dp 100dp + 125dp + 150dp 200dp - 300dp 1dp diff --git a/.idea/misc.xml b/.idea/misc.xml index d8f1d5f..fbb4b44 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -187,6 +187,8 @@ + + @@ -202,6 +204,7 @@ + @@ -214,6 +217,7 @@ + @@ -299,9 +303,11 @@ + + @@ -315,6 +321,7 @@ + diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 37cf1d5..21490f0 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -96,7 +96,7 @@ @Override public void onChanged(HomePageBean resultBean) { if (resultBean.getCode() == 200) { - NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, resultBean.getData().getMenus()) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, resultBean.getData().getMenus()) { @Override public void convertView(ViewHolder viewHolder, int position, HomePageBean.DataBean.MenusBean item) { viewHolder.setImageResource(R.id.imageView, StringHelper.obtainIcon(item.getName())).setText(R.id.textView, item.getName()); diff --git a/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java new file mode 100644 index 0000000..1f1f7ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CaseResourceBean.java @@ -0,0 +1,105 @@ +package com.casic.dcms.model; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class CaseResourceBean { + + 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 caseCode; + private String caseNum; + private String caseSource; + private String componentNum; + private String eorc; + private String eventNum; + + public String getCaseCode() { + return caseCode; + } + + public void setCaseCode(String caseCode) { + this.caseCode = caseCode; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getCaseSource() { + return caseSource; + } + + public void setCaseSource(String caseSource) { + this.caseSource = caseSource; + } + + public String getComponentNum() { + return componentNum; + } + + public void setComponentNum(String componentNum) { + this.componentNum = componentNum; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getEventNum() { + return eventNum; + } + + public void setEventNum(String eventNum) { + this.eventNum = eventNum; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java new file mode 100644 index 0000000..809c567 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/CityBaseDataBean.java @@ -0,0 +1,91 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class CityBaseDataBean { + + 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 code; + private String dcmName; + private String id; + private String tag; + private String val; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDcmName() { + return dcmName; + } + + public void setDcmName(String dcmName) { + this.dcmName = dcmName; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java b/app/src/main/java/com/casic/dcms/model/EventSourceBean.java deleted file mode 100644 index b04fa8f..0000000 --- a/app/src/main/java/com/casic/dcms/model/EventSourceBean.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.casic.dcms.model; - -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 10:07 - * @email : 290677893@qq.com - **/ -public class EventSourceBean { - - 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 DataDTO { - private String caseCode; - private String caseNum; - private String caseSource; - private String componentNum; - private String eorc; - private String eventNum; - - public String getCaseCode() { - return caseCode; - } - - public void setCaseCode(String caseCode) { - this.caseCode = caseCode; - } - - public String getCaseNum() { - return caseNum; - } - - public void setCaseNum(String caseNum) { - this.caseNum = caseNum; - } - - public String getCaseSource() { - return caseSource; - } - - public void setCaseSource(String caseSource) { - this.caseSource = caseSource; - } - - public String getComponentNum() { - return componentNum; - } - - public void setComponentNum(String componentNum) { - this.componentNum = componentNum; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getEventNum() { - return eventNum; - } - - public void setEventNum(String eventNum) { - this.eventNum = eventNum; - } - } -} 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 bbb5dca..62f8271 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -27,6 +27,7 @@ import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; +import com.pengxh.androidx.lite.hub.IntHub; import java.text.DecimalFormat; import java.util.ArrayList; @@ -43,9 +44,58 @@ public class ChartViewHelper { private static final String TAG = "ChartViewHelper"; - private static final DecimalFormat decimalFormat = new DecimalFormat("##0"); + private static final DecimalFormat decimalFormat = new DecimalFormat("##0.00"); private static final String[] labelName = {"普通", "快速", "三包"}; + private static void initPieChart(PieChart chart) { + chart.setUsePercentValues(true); //百分比数字显示 + chart.getDescription().setEnabled(false); + chart.setBackgroundColor(Color.WHITE); //设置图表背景色 + chart.setRotationEnabled(true); + chart.setHighlightPerTapEnabled(true); + chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 + chart.setDrawEntryLabels(false); //不显示分类标签 + chart.setDrawCenterText(false); + chart.setDrawHoleEnabled(true); + chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 + //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 + chart.setExtraOffsets(5, 5, 5, 5); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + } + + public static void setPieChartData(PieChart chart, List entries) { + initPieChart(chart); + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f);//设置饼状块之间的间隙 + //设置饼图块颜色 + List colors = new ArrayList<>(); + for (int i = 0; i < entries.size(); i++) { + colors.add(IntHub.convertColor(chart.getContext(), LocaleConstant.PIE_COLORS.get(i))); + } + dataSet.setColors(colors); + //设置标签显示在饼图块外面 + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.BLUE); + PieData data = new PieData(dataSet); + data.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value) + "%"; + } + }); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); //数据值颜色 + chart.setData(data); + chart.highlightValues(null); + chart.invalidate(); + } + public static void initLineChart(LineChart chart) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); @@ -221,57 +271,4 @@ chart.setData(barData); chart.invalidate(); } - - public static void initPieChart(PieChart chart) { - chart.setUsePercentValues(false); //百分比数字显示 - chart.getDescription().setEnabled(false); - chart.setDragDecelerationFrictionCoef(0.95f);//图表转动阻力摩擦系数[0,1] - chart.setBackgroundColor(Color.WHITE); //设置图表背景色 - chart.setRotationEnabled(true); - chart.setHighlightPerTapEnabled(true); - chart.animateY(1200, Easing.EaseInOutQuad);// 设置图表展示动画效果 - chart.setDrawEntryLabels(false); //不显示分类标签 - chart.setDrawCenterText(false); - chart.setDrawHoleEnabled(false); - chart.setEntryLabelColor(Color.BLUE);//图表文本字体颜色 - chart.setEntryLabelTextSize(12f); - //设置图表上下左右的偏移,类似于外边距,可以控制饼图大小 - chart.setExtraOffsets(0, 5, 0, 5); - //设置图例位置 - Legend legend = chart.getLegend(); - legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); - legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); - legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); - legend.setWordWrapEnabled(true); - } - - public static void setPieChartData(PieChart chart, List entries) { - PieDataSet dataSet = new PieDataSet(entries, ""); - dataSet.setSliceSpace(3f);//设置饼状块之间的间隙 - dataSet.setSelectionShift(5f);//设置饼状块被选中时突出的距离 - //设置饼图块颜色 - List colors = new ArrayList<>(); - for (int i = 0; i < entries.size(); i++) { - colors.add(ContextCompat.getColor(BaseApplication.get(), LocaleConstant.PIE_COLORS.get(i))); - } - dataSet.setColors(colors); - //设置标签显示在饼图块外面 - dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); - dataSet.setValueLineColor(Color.BLUE); - dataSet.setValueLinePart1Length(0.75f);//标签指示线前半截长度 - dataSet.setValueLinePart2Length(0.35f);//标签指示线后半截长度 - PieData data = new PieData(dataSet); - data.setValueFormatter(new ValueFormatter() { - @Override - public String getFormattedValue(float value) { - return decimalFormat.format(value) + "件"; - } - }); - data.setValueTextSize(12f); - data.setValueTextColor(Color.BLUE); //数据值颜色 - chart.setData(data); - chart.highlightValues(null); - chart.invalidate(); - } } diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHub.java b/app/src/main/java/com/casic/dcms/utils/ColorHub.java new file mode 100644 index 0000000..c987161 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/utils/ColorHub.java @@ -0,0 +1,24 @@ +package com.casic.dcms.utils; + +import android.content.Context; + +import com.pengxh.androidx.lite.hub.IntHub; + +import java.util.ArrayList; +import java.util.Random; + +public class ColorHub { + /** + * 随机生成颜色 + */ + public static int[] generateColor(Context context) { + ArrayList colorCollection = new ArrayList<>(LocaleConstant.BACKGROUND_COLOR.size()); + + for (int i = 0; i < LocaleConstant.BACKGROUND_COLOR.size(); i++) { + colorCollection.add(new int[]{LocaleConstant.BACKGROUND_COLOR.get(i), LocaleConstant.TEXT_COLOR.get(i)}); + } + + int[] colorArray = colorCollection.get(new Random().nextInt(colorCollection.size())); + return new int[]{IntHub.convertColor(context, colorArray[0]), IntHub.convertColor(context, colorArray[1])}; + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index f018b90..91c63f1 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -34,10 +34,21 @@ //饼图预置颜色,前三种作为街道统计饼图颜色 public static final List PIE_COLORS = Arrays.asList( - R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, - R.color.persuadeColor, R.color.punishColor, R.color.colorAccent, - R.color.pieColor4, R.color.pieColor2, R.color.pieColor5, - R.color.colorPrimary); + R.color.red_300, R.color.orange_300, R.color.yellow_300, R.color.green_300, R.color.cyan_300, R.color.blue_300, R.color.purple_300, + R.color.red_400, R.color.orange_400, R.color.yellow_400, R.color.green_400, R.color.cyan_400, R.color.blue_400, R.color.purple_400, + R.color.red_500, R.color.orange_500, R.color.yellow_500, R.color.green_500, R.color.cyan_500, R.color.blue_500, R.color.purple_500, + R.color.red_600, R.color.orange_600, R.color.yellow_600, R.color.green_600, R.color.cyan_600, R.color.blue_600, R.color.purple_600, + R.color.red_700, R.color.orange_700, R.color.yellow_700, R.color.green_700, R.color.cyan_700, R.color.blue_700, R.color.purple_700, + R.color.red_800, R.color.orange_800, R.color.yellow_800, R.color.green_800, R.color.cyan_800, R.color.blue_800, R.color.purple_800, + R.color.red_900, R.color.orange_900, R.color.yellow_900, R.color.green_900, R.color.cyan_900, R.color.blue_900, R.color.purple_900 + ); + + public static final List BACKGROUND_COLOR = Arrays.asList( + R.color.color_A, R.color.color_B, R.color.color_C, R.color.color_D + ); + public static final List TEXT_COLOR = Arrays.asList( + R.color.textColor_A, R.color.textColor_B, R.color.textColor_C, R.color.textColor_D + ); public static final String ACCOUNT = "account"; public static final String PASSWORD = "password"; diff --git a/app/src/main/java/com/casic/dcms/utils/StringHelper.java b/app/src/main/java/com/casic/dcms/utils/StringHelper.java index 36d3d0c..147b1d6 100644 --- a/app/src/main/java/com/casic/dcms/utils/StringHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/StringHelper.java @@ -228,6 +228,35 @@ return R.mipmap.gwgl; case "路灯管理": return R.mipmap.ldgl; + //////////////////////////////////////////////////////// + case "网格": + return R.mipmap.data_grid; + case "部件": + return R.mipmap.data_component; + case "商铺": + return R.mipmap.data_shop; + case "作业车辆": + return R.mipmap.data_machine; + case "公务车辆": + return R.mipmap.data_car; + case "环境监测点": + return R.mipmap.data_enviroment; + case "垃圾中转站": + return R.mipmap.data_dump; + case "城区公厕": + return R.mipmap.data_wc; + case "分类垃圾桶": + return R.mipmap.data_bucket; + case "人员在岗率": + return R.mipmap.data_worker; + case "作业完成率": + return R.mipmap.data_work; + case "路灯亮灯率": + return R.mipmap.data_light; + case "视频在线率": + return R.mipmap.data_video; + case "管网报警率": + return R.mipmap.data_pipeline; default: return R.mipmap.app_logo; } diff --git a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java index 1f68656..1d68cad 100644 --- a/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java +++ b/app/src/main/java/com/casic/dcms/utils/TimeOrDateUtil.java @@ -83,4 +83,22 @@ dateFormat = new SimpleDateFormat("HH:mm", Locale.CHINA); return dateFormat.format(new Date(millSeconds)); } + + public static String getOneMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getThreeMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 3 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } + + public static String getSixMonthDate() { + dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + long oneMonth = System.currentTimeMillis() - 6 * 31 * 24 * 3600 * 1000L; + return dateFormat.format(new Date(oneMonth)); + } } 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 6d3574d..9567429 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 @@ -172,9 +172,15 @@ /** * 获取问题来源 */ + @GET("/dcm/view/list") + Observable getCityBaseData(@Header("token") String token); + + /** + * 案卷来源统计 + */ @FormUrlEncoded @POST("/departmentAssess/sourceList") - Observable getEventSource( + Observable getCaseResource( @Header("token") String token, @Field("begTime") String begTime, @Field("endTime") String endTime 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 8876060..f09aebf 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 @@ -118,10 +118,17 @@ } /** - * 获取问题来源 + * 获取城市基础数据 */ - public static Observable getEventSource(String begTime, String endTime) { - return api.getEventSource(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getCityBaseData() { + return api.getCityBaseData(AuthenticationHelper.getToken()); + } + + /** + * 获取城市基础数据 + */ + public static Observable getCaseResource(String begTime, String endTime) { + return api.getCaseResource(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 f29adb0..ea9b6c9 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 @@ -2,27 +2,34 @@ import android.content.Context; import android.view.View; +import android.widget.RadioGroup; import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.model.CaseResourceBean; 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.github.mikephil.charting.data.BarEntry; +import com.casic.dcms.vm.DataAnalysisViewModel; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.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.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Random; /** * @author a203 @@ -32,10 +39,8 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); private final Context context = CaseResourceActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -44,53 +49,97 @@ viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); } @Override protected void observeRequestState() { - + 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 initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.caseResourceData.observe(this, new Observer() { + @Override + public void onChanged(CaseResourceBean caseResourceBean) { + if (caseResourceBean.getCode() == 200) { + int caseCount = 0; + List dataModels = caseResourceBean.getData(); + List pieEntries = new ArrayList<>(); + for (CaseResourceBean.DataModel dataModel : dataModels) { + caseCount += Integer.parseInt(dataModel.getCaseNum()); + + if (!dataModel.getCaseNum().equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(dataModel.getCaseNum()), dataModel.getCaseSource())); + } + } + viewBinding.caseCountView.setText("案卷数:" + caseCount); + + //数据绑定饼图 + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + + //绑定列表 + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, dataModels) { + @Override + public void convertView(ViewHolder viewHolder, int position, CaseResourceBean.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.getCaseSource()) + .setText(R.id.caseNumView, item.getCaseNum()); + } + }; + viewBinding.caseResourceView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.caseResourceView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CaseResourceBean.DataModel dataModel) { + + } + }); + } + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); + public void onClick(View v) { + + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getCaseResource(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } } }); } 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 14bcf7d..a8bad4d 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 @@ -1,38 +1,25 @@ package com.casic.dcms.view.statistics; import android.content.Context; -import android.graphics.Color; -import android.view.View; import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityCityBaseDataBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.utils.StringHelper; import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - /** * @author : Pengxh * @time : 2021/4/16 9:24 @@ -42,10 +29,7 @@ private static final String TAG = "CityBaseDataActivity"; private final Context context = CityBaseDataActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; + private DataAnalysisViewModel dataAnalysisViewModel; @Override protected void setupTopBarLayout() { @@ -58,103 +42,47 @@ @Override protected void observeRequestState() { - - } - - @Override - protected void initData() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { @Override public void onChanged(LoadState loadState) { if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); } else { DialogHelper.dismissLoadingDialog(); } } }); } + + @Override + protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.getCityBaseData(); + dataAnalysisViewModel.cityBaseData.observe(this, new Observer() { + @Override + public void onChanged(CityBaseDataBean cityBaseDataBean) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_base_city_data_rv_g, cityBaseDataBean.getData()) { + + @Override + public void convertView(ViewHolder viewHolder, int position, CityBaseDataBean.DataModel item) { + viewHolder.setImageResource(R.id.dataIconView, StringHelper.obtainIcon(item.getDcmName())) + .setText(R.id.dataTitleView, item.getDcmName()) + .setText(R.id.dataValueView, item.getVal()); + } + }; + viewBinding.baseDataRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, CityBaseDataBean.DataModel dataModel) { + + } + }); + } + }); + } + + @Override + protected void initEvent() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7156356..f90437e 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -11,6 +11,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.ContextHub; import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; @@ -49,7 +50,7 @@ models.add(model); } - NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_recycleview, models) { + NormalRecyclerAdapter adapter = new NormalRecyclerAdapter(R.layout.item_home_rv_g, models) { @Override public void convertView(ViewHolder viewHolder, int position, DataAnalysisGridModel item) { @@ -63,32 +64,25 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, CityBaseDataActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CityBaseDataActivity.class); break; case 1: - intent.setClass(context, CaseResourceActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, CaseResourceActivity.class); break; case 2: - intent.setClass(context, HighEventActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, HighEventActivity.class); break; case 3: - intent.setClass(context, DeptHandleConditionActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, DeptHandleConditionActivity.class); break; case 4: - intent.setClass(context, GridAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, GridAnalysisActivity.class); break; case 5: - intent.setClass(context, TrendAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, TrendAnalysisActivity.class); break; case 6: - intent.setClass(context, PunishAnalysisActivity.class); - startActivity(intent); + ContextHub.navigatePageTo(context, PunishAnalysisActivity.class); break; } } 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 69a4d72..05f7057 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 @@ -70,7 +70,6 @@ e.printStackTrace(); } initTableConfig(); - ChartViewHelper.initPieChart(viewBinding.eventPieChart); dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); dataAnalysisViewModel.obtainHighEvent(date[0], date[1]); } 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 dbfb31b..e8ecc14 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -2,7 +2,8 @@ import androidx.lifecycle.MutableLiveData; -import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.CaseResourceBean; +import com.casic.dcms.model.CityBaseDataBean; import com.casic.dcms.model.HighEventBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; @@ -20,12 +21,13 @@ public class DataAnalysisViewModel extends BaseViewModel { private final Gson gson = new Gson(); - public MutableLiveData eventSourceModel = new MutableLiveData<>(); + public MutableLiveData cityBaseData = new MutableLiveData<>(); + public MutableLiveData caseResourceData = new MutableLiveData<>(); public MutableLiveData highEventModel = new MutableLiveData<>(); - public void obtainEventSource(String begTime, String endTime) { + public void getCityBaseData() { loadState.setValue(LoadState.Loading); - Observable observable = RetrofitServiceManager.getEventSource(begTime, endTime); + Observable observable = RetrofitServiceManager.getCityBaseData(); ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { @Override public void onCompleted() { @@ -43,9 +45,42 @@ String response = responseBody.string(); int responseCode = StringHelper.separateResponseCode(response); if (responseCode == 200) { - EventSourceBean resultBean = gson.fromJson(response, new TypeToken() { + CityBaseDataBean resultBean = gson.fromJson(response, new TypeToken() { }.getType()); - eventSourceModel.setValue(resultBean); + cityBaseData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getCaseResource(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getCaseResource(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) { + CaseResourceBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + caseResourceData.setValue(resultBean); } else { loadState.setValue(LoadState.Fail); } diff --git a/app/src/main/res/drawable/selector_text_radio_button.xml b/app/src/main/res/drawable/selector_text_radio_button.xml new file mode 100644 index 0000000..3916492 --- /dev/null +++ b/app/src/main/res/drawable/selector_text_radio_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 015123a..671d92b 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,44 +7,96 @@ + layout="@layout/include_base_title" /> - + android:layout_marginHorizontal="@dimen/dp_10" + android:layout_marginTop="@dimen/dp_10" + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml index 91cb65a..ec4b923 100644 --- a/app/src/main/res/layout/activity_city_base_data.xml +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -7,38 +7,12 @@ + layout="@layout/include_base_title" /> - - - - - - - - - - - - + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:spanCount="2" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_base_city_data_rv_g.xml b/app/src/main/res/layout/item_base_city_data_rv_g.xml new file mode 100644 index 0000000..db8aa89 --- /dev/null +++ b/app/src/main/res/layout/item_base_city_data_rv_g.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_case_resource_lv_l.xml b/app/src/main/res/layout/item_case_resource_lv_l.xml new file mode 100644 index 0000000..fa4dbd4 --- /dev/null +++ b/app/src/main/res/layout/item_case_resource_lv_l.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_recycleview.xml b/app/src/main/res/layout/item_home_recycleview.xml deleted file mode 100644 index b1bb791..0000000 --- a/app/src/main/res/layout/item_home_recycleview.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_rv_g.xml b/app/src/main/res/layout/item_home_rv_g.xml new file mode 100644 index 0000000..b1bb791 --- /dev/null +++ b/app/src/main/res/layout/item_home_rv_g.xml @@ -0,0 +1,32 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/data_bucket.png b/app/src/main/res/mipmap-xxhdpi/data_bucket.png new file mode 100644 index 0000000..0cff66e --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_bucket.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_car.png b/app/src/main/res/mipmap-xxhdpi/data_car.png new file mode 100644 index 0000000..7cc43fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_car.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_component.png b/app/src/main/res/mipmap-xxhdpi/data_component.png new file mode 100644 index 0000000..98e2b85 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_component.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_dump.png b/app/src/main/res/mipmap-xxhdpi/data_dump.png new file mode 100644 index 0000000..08b91a2 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_dump.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_enviroment.png b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png new file mode 100644 index 0000000..a85466b --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_enviroment.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_grid.png b/app/src/main/res/mipmap-xxhdpi/data_grid.png new file mode 100644 index 0000000..d5791fd --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_grid.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_light.png b/app/src/main/res/mipmap-xxhdpi/data_light.png new file mode 100644 index 0000000..9f6c0ec --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_light.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_machine.png b/app/src/main/res/mipmap-xxhdpi/data_machine.png new file mode 100644 index 0000000..0509d58 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_machine.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_pipeline.png b/app/src/main/res/mipmap-xxhdpi/data_pipeline.png new file mode 100644 index 0000000..130dabc --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_pipeline.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_shop.png b/app/src/main/res/mipmap-xxhdpi/data_shop.png new file mode 100644 index 0000000..93c41a1 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_shop.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_video.png b/app/src/main/res/mipmap-xxhdpi/data_video.png new file mode 100644 index 0000000..9d4dff8 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_video.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_wc.png b/app/src/main/res/mipmap-xxhdpi/data_wc.png new file mode 100644 index 0000000..f82f84e --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_wc.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_work.png b/app/src/main/res/mipmap-xxhdpi/data_work.png new file mode 100644 index 0000000..3b3db13 --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_work.png Binary files differ diff --git a/app/src/main/res/mipmap-xxhdpi/data_worker.png b/app/src/main/res/mipmap-xxhdpi/data_worker.png new file mode 100644 index 0000000..f08f6bf --- /dev/null +++ b/app/src/main/res/mipmap-xxhdpi/data_worker.png Binary files differ diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 7c69971..32f5776 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -15,7 +15,7 @@ #000000 #FF0000 - #1D55C6 + #FF1D55C6 #333333 #626262 #F7F7FA @@ -32,10 +32,70 @@ #F1F1F1 + + #E4ECFF + #60A5FF + #DCF7FE + #3CCCE3 + #D8F7F1 + #3CCCE3 + #FDF7E9 + #F9C477 + - #FF6969 - #CDA5FF - #C3EB87 - #9BFFFF - #FFFF00 + #E57373 + #EF5350 + #F44336 + #E53935 + #D32F2F + #C62828 + #B71C1C + + #FFB74D + #FFA726 + #FF9800 + #FB8C00 + #F57C00 + #EF6C00 + #E65100 + + #FFF176 + #FFEE58 + #FFEB3B + #FDD835 + #FBC02D + #F9A825 + #F57F17 + + #81C784 + #66BB6A + #4CAF50 + #43A047 + #388E3C + #2E7D32 + #1B5E20 + + #4DD0E1 + #26C6DA + #00BCD4 + #00ACC1 + #0097A7 + #00838F + #006064 + + #64B5F6 + #42A5F5 + #2196F3 + #1E88E5 + #1976D2 + #1565C0 + #0D47A1 + + #BA68C8 + #AB47BC + #9C27B0 + #8E24AA + #7B1FA2 + #6A1B9A + #4A148C diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 3d0040f..3cc24c1 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -8,21 +8,31 @@ 22sp 45sp - + + 1dp + 2dp 3dp 5dp 7dp 10dp + 15dp 20dp 25dp 30dp 32dp + 35dp 40dp + 45dp 50dp + 55dp + 60dp + 70dp + 75dp 80dp 100dp + 125dp + 150dp 200dp - 300dp 1dp diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 2f8bc91..6c68df8 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -224,4 +224,33 @@ wrap_content none + + + + +