diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/mvp/model/EventSourceModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java new file mode 100644 index 0000000..cc3d4d7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:53 + * @email : 290677893@qq.com + **/ +public class EventSourceModelImpl implements IEventSourceModel { + + private OnGetEventSourceListener listener; + + public EventSourceModelImpl(OnGetEventSourceListener sourceListener) { + this.listener = sourceListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetEventSourceListener { + void onSuccess(EventSourceBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getEventSourceResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(EventSourceBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/mvp/model/EventSourceModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java new file mode 100644 index 0000000..cc3d4d7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:53 + * @email : 290677893@qq.com + **/ +public class EventSourceModelImpl implements IEventSourceModel { + + private OnGetEventSourceListener listener; + + public EventSourceModelImpl(OnGetEventSourceListener sourceListener) { + this.listener = sourceListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetEventSourceListener { + void onSuccess(EventSourceBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getEventSourceResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(EventSourceBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java new file mode 100644 index 0000000..d470ab3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java @@ -0,0 +1,57 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public class HighEventModelImpl implements IHighEventModel { + + private OnGetHighEventListener listener; + + public HighEventModelImpl(OnGetHighEventListener highEventListener) { + this.listener = highEventListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetHighEventListener { + void onSuccess(Object resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getHighEventResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(Object resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/mvp/model/EventSourceModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java new file mode 100644 index 0000000..cc3d4d7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:53 + * @email : 290677893@qq.com + **/ +public class EventSourceModelImpl implements IEventSourceModel { + + private OnGetEventSourceListener listener; + + public EventSourceModelImpl(OnGetEventSourceListener sourceListener) { + this.listener = sourceListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetEventSourceListener { + void onSuccess(EventSourceBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getEventSourceResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(EventSourceBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java new file mode 100644 index 0000000..d470ab3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java @@ -0,0 +1,57 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public class HighEventModelImpl implements IHighEventModel { + + private OnGetHighEventListener listener; + + public HighEventModelImpl(OnGetHighEventListener highEventListener) { + this.listener = highEventListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetHighEventListener { + void onSuccess(Object resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getHighEventResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(Object resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java new file mode 100644 index 0000000..ad5709a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IEventSourceModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/mvp/model/EventSourceModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java new file mode 100644 index 0000000..cc3d4d7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:53 + * @email : 290677893@qq.com + **/ +public class EventSourceModelImpl implements IEventSourceModel { + + private OnGetEventSourceListener listener; + + public EventSourceModelImpl(OnGetEventSourceListener sourceListener) { + this.listener = sourceListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetEventSourceListener { + void onSuccess(EventSourceBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getEventSourceResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(EventSourceBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java new file mode 100644 index 0000000..d470ab3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java @@ -0,0 +1,57 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public class HighEventModelImpl implements IHighEventModel { + + private OnGetHighEventListener listener; + + public HighEventModelImpl(OnGetHighEventListener highEventListener) { + this.listener = highEventListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetHighEventListener { + void onSuccess(Object resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getHighEventResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(Object resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java new file mode 100644 index 0000000..ad5709a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IEventSourceModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java new file mode 100644 index 0000000..c86a82a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IHighEventModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/mvp/model/EventSourceModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java new file mode 100644 index 0000000..cc3d4d7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:53 + * @email : 290677893@qq.com + **/ +public class EventSourceModelImpl implements IEventSourceModel { + + private OnGetEventSourceListener listener; + + public EventSourceModelImpl(OnGetEventSourceListener sourceListener) { + this.listener = sourceListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetEventSourceListener { + void onSuccess(EventSourceBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getEventSourceResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(EventSourceBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java new file mode 100644 index 0000000..d470ab3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java @@ -0,0 +1,57 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public class HighEventModelImpl implements IHighEventModel { + + private OnGetHighEventListener listener; + + public HighEventModelImpl(OnGetHighEventListener highEventListener) { + this.listener = highEventListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetHighEventListener { + void onSuccess(Object resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getHighEventResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(Object resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java new file mode 100644 index 0000000..ad5709a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IEventSourceModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java new file mode 100644 index 0000000..c86a82a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IHighEventModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java new file mode 100644 index 0000000..bc6c382 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.EventSourceModelImpl; +import com.casic.dcms.mvp.view.IEventSourceView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class EventSourcePresenterImpl extends BasePresenter implements IEventSourcePresenter, EventSourceModelImpl.OnGetEventSourceListener { + + private IEventSourceView view; + private EventSourceModelImpl actionModel; + + public EventSourcePresenterImpl(IEventSourceView sourceView) { + this.view = sourceView; + actionModel = new EventSourceModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(EventSourceBean resultBean) { + view.obtainEventSourceResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/mvp/model/EventSourceModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java new file mode 100644 index 0000000..cc3d4d7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:53 + * @email : 290677893@qq.com + **/ +public class EventSourceModelImpl implements IEventSourceModel { + + private OnGetEventSourceListener listener; + + public EventSourceModelImpl(OnGetEventSourceListener sourceListener) { + this.listener = sourceListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetEventSourceListener { + void onSuccess(EventSourceBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getEventSourceResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(EventSourceBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java new file mode 100644 index 0000000..d470ab3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java @@ -0,0 +1,57 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public class HighEventModelImpl implements IHighEventModel { + + private OnGetHighEventListener listener; + + public HighEventModelImpl(OnGetHighEventListener highEventListener) { + this.listener = highEventListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetHighEventListener { + void onSuccess(Object resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getHighEventResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(Object resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java new file mode 100644 index 0000000..ad5709a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IEventSourceModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java new file mode 100644 index 0000000..c86a82a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IHighEventModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java new file mode 100644 index 0000000..bc6c382 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.EventSourceModelImpl; +import com.casic.dcms.mvp.view.IEventSourceView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class EventSourcePresenterImpl extends BasePresenter implements IEventSourcePresenter, EventSourceModelImpl.OnGetEventSourceListener { + + private IEventSourceView view; + private EventSourceModelImpl actionModel; + + public EventSourcePresenterImpl(IEventSourceView sourceView) { + this.view = sourceView; + actionModel = new EventSourceModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(EventSourceBean resultBean) { + view.obtainEventSourceResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java new file mode 100644 index 0000000..045abc3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.HighEventModelImpl; +import com.casic.dcms.mvp.view.IHighEventView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class HighEventPresenterImpl extends BasePresenter implements IHighEventPresenter, HighEventModelImpl.OnGetHighEventListener { + + private IHighEventView view; + private HighEventModelImpl actionModel; + + public HighEventPresenterImpl(IHighEventView highEventView) { + this.view = highEventView; + actionModel = new HighEventModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(Object resultBean) { + view.obtainHighEventResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/mvp/model/EventSourceModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java new file mode 100644 index 0000000..cc3d4d7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:53 + * @email : 290677893@qq.com + **/ +public class EventSourceModelImpl implements IEventSourceModel { + + private OnGetEventSourceListener listener; + + public EventSourceModelImpl(OnGetEventSourceListener sourceListener) { + this.listener = sourceListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetEventSourceListener { + void onSuccess(EventSourceBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getEventSourceResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(EventSourceBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java new file mode 100644 index 0000000..d470ab3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java @@ -0,0 +1,57 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public class HighEventModelImpl implements IHighEventModel { + + private OnGetHighEventListener listener; + + public HighEventModelImpl(OnGetHighEventListener highEventListener) { + this.listener = highEventListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetHighEventListener { + void onSuccess(Object resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getHighEventResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(Object resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java new file mode 100644 index 0000000..ad5709a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IEventSourceModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java new file mode 100644 index 0000000..c86a82a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IHighEventModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java new file mode 100644 index 0000000..bc6c382 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.EventSourceModelImpl; +import com.casic.dcms.mvp.view.IEventSourceView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class EventSourcePresenterImpl extends BasePresenter implements IEventSourcePresenter, EventSourceModelImpl.OnGetEventSourceListener { + + private IEventSourceView view; + private EventSourceModelImpl actionModel; + + public EventSourcePresenterImpl(IEventSourceView sourceView) { + this.view = sourceView; + actionModel = new EventSourceModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(EventSourceBean resultBean) { + view.obtainEventSourceResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java new file mode 100644 index 0000000..045abc3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.HighEventModelImpl; +import com.casic.dcms.mvp.view.IHighEventView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class HighEventPresenterImpl extends BasePresenter implements IHighEventPresenter, HighEventModelImpl.OnGetHighEventListener { + + private IHighEventView view; + private HighEventModelImpl actionModel; + + public HighEventPresenterImpl(IHighEventView highEventView) { + this.view = highEventView; + actionModel = new HighEventModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(Object resultBean) { + view.obtainHighEventResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java new file mode 100644 index 0000000..8d45793 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IEventSourcePresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/mvp/model/EventSourceModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java new file mode 100644 index 0000000..cc3d4d7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:53 + * @email : 290677893@qq.com + **/ +public class EventSourceModelImpl implements IEventSourceModel { + + private OnGetEventSourceListener listener; + + public EventSourceModelImpl(OnGetEventSourceListener sourceListener) { + this.listener = sourceListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetEventSourceListener { + void onSuccess(EventSourceBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getEventSourceResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(EventSourceBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java new file mode 100644 index 0000000..d470ab3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java @@ -0,0 +1,57 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public class HighEventModelImpl implements IHighEventModel { + + private OnGetHighEventListener listener; + + public HighEventModelImpl(OnGetHighEventListener highEventListener) { + this.listener = highEventListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetHighEventListener { + void onSuccess(Object resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getHighEventResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(Object resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java new file mode 100644 index 0000000..ad5709a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IEventSourceModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java new file mode 100644 index 0000000..c86a82a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IHighEventModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java new file mode 100644 index 0000000..bc6c382 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.EventSourceModelImpl; +import com.casic.dcms.mvp.view.IEventSourceView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class EventSourcePresenterImpl extends BasePresenter implements IEventSourcePresenter, EventSourceModelImpl.OnGetEventSourceListener { + + private IEventSourceView view; + private EventSourceModelImpl actionModel; + + public EventSourcePresenterImpl(IEventSourceView sourceView) { + this.view = sourceView; + actionModel = new EventSourceModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(EventSourceBean resultBean) { + view.obtainEventSourceResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java new file mode 100644 index 0000000..045abc3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.HighEventModelImpl; +import com.casic.dcms.mvp.view.IHighEventView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class HighEventPresenterImpl extends BasePresenter implements IHighEventPresenter, HighEventModelImpl.OnGetHighEventListener { + + private IHighEventView view; + private HighEventModelImpl actionModel; + + public HighEventPresenterImpl(IHighEventView highEventView) { + this.view = highEventView; + actionModel = new HighEventModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(Object resultBean) { + view.obtainHighEventResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java new file mode 100644 index 0000000..8d45793 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IEventSourcePresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java new file mode 100644 index 0000000..d2d85fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IHighEventPresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/mvp/model/EventSourceModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java new file mode 100644 index 0000000..cc3d4d7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:53 + * @email : 290677893@qq.com + **/ +public class EventSourceModelImpl implements IEventSourceModel { + + private OnGetEventSourceListener listener; + + public EventSourceModelImpl(OnGetEventSourceListener sourceListener) { + this.listener = sourceListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetEventSourceListener { + void onSuccess(EventSourceBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getEventSourceResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(EventSourceBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java new file mode 100644 index 0000000..d470ab3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java @@ -0,0 +1,57 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public class HighEventModelImpl implements IHighEventModel { + + private OnGetHighEventListener listener; + + public HighEventModelImpl(OnGetHighEventListener highEventListener) { + this.listener = highEventListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetHighEventListener { + void onSuccess(Object resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getHighEventResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(Object resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java new file mode 100644 index 0000000..ad5709a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IEventSourceModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java new file mode 100644 index 0000000..c86a82a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IHighEventModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java new file mode 100644 index 0000000..bc6c382 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.EventSourceModelImpl; +import com.casic.dcms.mvp.view.IEventSourceView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class EventSourcePresenterImpl extends BasePresenter implements IEventSourcePresenter, EventSourceModelImpl.OnGetEventSourceListener { + + private IEventSourceView view; + private EventSourceModelImpl actionModel; + + public EventSourcePresenterImpl(IEventSourceView sourceView) { + this.view = sourceView; + actionModel = new EventSourceModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(EventSourceBean resultBean) { + view.obtainEventSourceResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java new file mode 100644 index 0000000..045abc3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.HighEventModelImpl; +import com.casic.dcms.mvp.view.IHighEventView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class HighEventPresenterImpl extends BasePresenter implements IHighEventPresenter, HighEventModelImpl.OnGetHighEventListener { + + private IHighEventView view; + private HighEventModelImpl actionModel; + + public HighEventPresenterImpl(IHighEventView highEventView) { + this.view = highEventView; + actionModel = new HighEventModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(Object resultBean) { + view.obtainHighEventResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java new file mode 100644 index 0000000..8d45793 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IEventSourcePresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java new file mode 100644 index 0000000..d2d85fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IHighEventPresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java new file mode 100644 index 0000000..b22af01 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.EventSourceBean; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:48 + * @email : 290677893@qq.com + **/ +public interface IEventSourceView { + void obtainEventSourceResult(EventSourceBean resultBean); +} diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/mvp/model/EventSourceModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java new file mode 100644 index 0000000..cc3d4d7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:53 + * @email : 290677893@qq.com + **/ +public class EventSourceModelImpl implements IEventSourceModel { + + private OnGetEventSourceListener listener; + + public EventSourceModelImpl(OnGetEventSourceListener sourceListener) { + this.listener = sourceListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetEventSourceListener { + void onSuccess(EventSourceBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getEventSourceResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(EventSourceBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java new file mode 100644 index 0000000..d470ab3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java @@ -0,0 +1,57 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public class HighEventModelImpl implements IHighEventModel { + + private OnGetHighEventListener listener; + + public HighEventModelImpl(OnGetHighEventListener highEventListener) { + this.listener = highEventListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetHighEventListener { + void onSuccess(Object resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getHighEventResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(Object resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java new file mode 100644 index 0000000..ad5709a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IEventSourceModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java new file mode 100644 index 0000000..c86a82a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IHighEventModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java new file mode 100644 index 0000000..bc6c382 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.EventSourceModelImpl; +import com.casic.dcms.mvp.view.IEventSourceView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class EventSourcePresenterImpl extends BasePresenter implements IEventSourcePresenter, EventSourceModelImpl.OnGetEventSourceListener { + + private IEventSourceView view; + private EventSourceModelImpl actionModel; + + public EventSourcePresenterImpl(IEventSourceView sourceView) { + this.view = sourceView; + actionModel = new EventSourceModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(EventSourceBean resultBean) { + view.obtainEventSourceResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java new file mode 100644 index 0000000..045abc3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.HighEventModelImpl; +import com.casic.dcms.mvp.view.IHighEventView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class HighEventPresenterImpl extends BasePresenter implements IHighEventPresenter, HighEventModelImpl.OnGetHighEventListener { + + private IHighEventView view; + private HighEventModelImpl actionModel; + + public HighEventPresenterImpl(IHighEventView highEventView) { + this.view = highEventView; + actionModel = new HighEventModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(Object resultBean) { + view.obtainHighEventResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java new file mode 100644 index 0000000..8d45793 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IEventSourcePresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java new file mode 100644 index 0000000..d2d85fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IHighEventPresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java new file mode 100644 index 0000000..b22af01 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.EventSourceBean; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:48 + * @email : 290677893@qq.com + **/ +public interface IEventSourceView { + void obtainEventSourceResult(EventSourceBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java new file mode 100644 index 0000000..505ab6b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java @@ -0,0 +1,10 @@ +package com.casic.dcms.mvp.view; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:06 + * @email : 290677893@qq.com + **/ +public interface IHighEventView { + void obtainHighEventResult(Object resultBean); +} diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/mvp/model/EventSourceModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java new file mode 100644 index 0000000..cc3d4d7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:53 + * @email : 290677893@qq.com + **/ +public class EventSourceModelImpl implements IEventSourceModel { + + private OnGetEventSourceListener listener; + + public EventSourceModelImpl(OnGetEventSourceListener sourceListener) { + this.listener = sourceListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetEventSourceListener { + void onSuccess(EventSourceBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getEventSourceResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(EventSourceBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java new file mode 100644 index 0000000..d470ab3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java @@ -0,0 +1,57 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public class HighEventModelImpl implements IHighEventModel { + + private OnGetHighEventListener listener; + + public HighEventModelImpl(OnGetHighEventListener highEventListener) { + this.listener = highEventListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetHighEventListener { + void onSuccess(Object resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getHighEventResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(Object resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java new file mode 100644 index 0000000..ad5709a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IEventSourceModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java new file mode 100644 index 0000000..c86a82a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IHighEventModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java new file mode 100644 index 0000000..bc6c382 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.EventSourceModelImpl; +import com.casic.dcms.mvp.view.IEventSourceView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class EventSourcePresenterImpl extends BasePresenter implements IEventSourcePresenter, EventSourceModelImpl.OnGetEventSourceListener { + + private IEventSourceView view; + private EventSourceModelImpl actionModel; + + public EventSourcePresenterImpl(IEventSourceView sourceView) { + this.view = sourceView; + actionModel = new EventSourceModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(EventSourceBean resultBean) { + view.obtainEventSourceResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java new file mode 100644 index 0000000..045abc3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.HighEventModelImpl; +import com.casic.dcms.mvp.view.IHighEventView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class HighEventPresenterImpl extends BasePresenter implements IHighEventPresenter, HighEventModelImpl.OnGetHighEventListener { + + private IHighEventView view; + private HighEventModelImpl actionModel; + + public HighEventPresenterImpl(IHighEventView highEventView) { + this.view = highEventView; + actionModel = new HighEventModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(Object resultBean) { + view.obtainHighEventResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java new file mode 100644 index 0000000..8d45793 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IEventSourcePresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java new file mode 100644 index 0000000..d2d85fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IHighEventPresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java new file mode 100644 index 0000000..b22af01 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.EventSourceBean; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:48 + * @email : 290677893@qq.com + **/ +public interface IEventSourceView { + void obtainEventSourceResult(EventSourceBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java new file mode 100644 index 0000000..505ab6b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java @@ -0,0 +1,10 @@ +package com.casic.dcms.mvp.view; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:06 + * @email : 290677893@qq.com + **/ +public interface IHighEventView { + void obtainHighEventResult(Object resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 1f959b0..a513a5b 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -1,6 +1,7 @@ package com.casic.dcms.ui; import android.content.Context; +import android.content.Intent; import android.view.View; import android.widget.ImageView; import android.widget.TextView; @@ -14,6 +15,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; import com.jzxiang.pickerview.TimePickerDialog; @@ -71,16 +73,18 @@ adapter.setOnGridItemClickListener(new AnalysisRecycleAdapter.OnGridItemClickListener() { @Override public void onClick(int position) { -// Intent intent = new Intent(); + Intent intent = new Intent(); switch (position) { case 0: - ToastHelper.showToast("问题来源", ToastHelper.INFO); + intent.setClass(context, EventSourceActivity.class); + startActivity(intent); break; case 1: ToastHelper.showToast("案卷状态", ToastHelper.INFO); break; case 2: - ToastHelper.showToast("高发问题", ToastHelper.INFO); + intent.setClass(context, HighEventListActivity.class); + startActivity(intent); break; case 3: ToastHelper.showToast("街道统计", ToastHelper.INFO); @@ -113,10 +117,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - startDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + startDateView.setText(date); + SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: @@ -124,10 +131,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - endDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + endDateView.setText(date); + SaveKeyValues.putValue("endTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; default: diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/mvp/model/EventSourceModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java new file mode 100644 index 0000000..cc3d4d7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:53 + * @email : 290677893@qq.com + **/ +public class EventSourceModelImpl implements IEventSourceModel { + + private OnGetEventSourceListener listener; + + public EventSourceModelImpl(OnGetEventSourceListener sourceListener) { + this.listener = sourceListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetEventSourceListener { + void onSuccess(EventSourceBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getEventSourceResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(EventSourceBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java new file mode 100644 index 0000000..d470ab3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java @@ -0,0 +1,57 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public class HighEventModelImpl implements IHighEventModel { + + private OnGetHighEventListener listener; + + public HighEventModelImpl(OnGetHighEventListener highEventListener) { + this.listener = highEventListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetHighEventListener { + void onSuccess(Object resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getHighEventResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(Object resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java new file mode 100644 index 0000000..ad5709a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IEventSourceModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java new file mode 100644 index 0000000..c86a82a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IHighEventModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java new file mode 100644 index 0000000..bc6c382 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.EventSourceModelImpl; +import com.casic.dcms.mvp.view.IEventSourceView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class EventSourcePresenterImpl extends BasePresenter implements IEventSourcePresenter, EventSourceModelImpl.OnGetEventSourceListener { + + private IEventSourceView view; + private EventSourceModelImpl actionModel; + + public EventSourcePresenterImpl(IEventSourceView sourceView) { + this.view = sourceView; + actionModel = new EventSourceModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(EventSourceBean resultBean) { + view.obtainEventSourceResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java new file mode 100644 index 0000000..045abc3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.HighEventModelImpl; +import com.casic.dcms.mvp.view.IHighEventView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class HighEventPresenterImpl extends BasePresenter implements IHighEventPresenter, HighEventModelImpl.OnGetHighEventListener { + + private IHighEventView view; + private HighEventModelImpl actionModel; + + public HighEventPresenterImpl(IHighEventView highEventView) { + this.view = highEventView; + actionModel = new HighEventModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(Object resultBean) { + view.obtainHighEventResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java new file mode 100644 index 0000000..8d45793 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IEventSourcePresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java new file mode 100644 index 0000000..d2d85fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IHighEventPresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java new file mode 100644 index 0000000..b22af01 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.EventSourceBean; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:48 + * @email : 290677893@qq.com + **/ +public interface IEventSourceView { + void obtainEventSourceResult(EventSourceBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java new file mode 100644 index 0000000..505ab6b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java @@ -0,0 +1,10 @@ +package com.casic.dcms.mvp.view; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:06 + * @email : 290677893@qq.com + **/ +public interface IHighEventView { + void obtainHighEventResult(Object resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 1f959b0..a513a5b 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -1,6 +1,7 @@ package com.casic.dcms.ui; import android.content.Context; +import android.content.Intent; import android.view.View; import android.widget.ImageView; import android.widget.TextView; @@ -14,6 +15,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; import com.jzxiang.pickerview.TimePickerDialog; @@ -71,16 +73,18 @@ adapter.setOnGridItemClickListener(new AnalysisRecycleAdapter.OnGridItemClickListener() { @Override public void onClick(int position) { -// Intent intent = new Intent(); + Intent intent = new Intent(); switch (position) { case 0: - ToastHelper.showToast("问题来源", ToastHelper.INFO); + intent.setClass(context, EventSourceActivity.class); + startActivity(intent); break; case 1: ToastHelper.showToast("案卷状态", ToastHelper.INFO); break; case 2: - ToastHelper.showToast("高发问题", ToastHelper.INFO); + intent.setClass(context, HighEventListActivity.class); + startActivity(intent); break; case 3: ToastHelper.showToast("街道统计", ToastHelper.INFO); @@ -113,10 +117,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - startDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + startDateView.setText(date); + SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: @@ -124,10 +131,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - endDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + endDateView.setText(date); + SaveKeyValues.putValue("endTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; default: diff --git a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java new file mode 100644 index 0000000..019a9dc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java @@ -0,0 +1,76 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.viewpager.widget.ViewPager; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.ui.fragment.ExcelFragment; +import com.casic.dcms.ui.fragment.PieChartFragment; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + **/ +public class EventSourceActivity extends BaseActivity { + + private static final String[] pageTitles = {"表格", "饼状图"}; + @BindView(R.id.resourceTopLayout) + QMUITopBarLayout resourceTopLayout; + @BindView(R.id.eventTabLayout) + TabLayout eventTabLayout; + @BindView(R.id.eventViewPager) + ViewPager eventViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_event_resource; + } + + @Override + protected void setupTopBarLayout() { + resourceTopLayout.setTitle("问题来源").setTextColor(ContextCompat.getColor(this, R.color.white)); + resourceTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + resourceTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); + fragmentList.add(new ExcelFragment()); + fragmentList.add(new PieChartFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); + eventViewPager.setAdapter(adapter); + //绑定TabLayout + eventTabLayout.setupWithViewPager(eventViewPager); + LinearLayout linearLayout = (LinearLayout) eventTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/mvp/model/EventSourceModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java new file mode 100644 index 0000000..cc3d4d7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:53 + * @email : 290677893@qq.com + **/ +public class EventSourceModelImpl implements IEventSourceModel { + + private OnGetEventSourceListener listener; + + public EventSourceModelImpl(OnGetEventSourceListener sourceListener) { + this.listener = sourceListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetEventSourceListener { + void onSuccess(EventSourceBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getEventSourceResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(EventSourceBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java new file mode 100644 index 0000000..d470ab3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java @@ -0,0 +1,57 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public class HighEventModelImpl implements IHighEventModel { + + private OnGetHighEventListener listener; + + public HighEventModelImpl(OnGetHighEventListener highEventListener) { + this.listener = highEventListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetHighEventListener { + void onSuccess(Object resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getHighEventResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(Object resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java new file mode 100644 index 0000000..ad5709a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IEventSourceModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java new file mode 100644 index 0000000..c86a82a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IHighEventModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java new file mode 100644 index 0000000..bc6c382 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.EventSourceModelImpl; +import com.casic.dcms.mvp.view.IEventSourceView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class EventSourcePresenterImpl extends BasePresenter implements IEventSourcePresenter, EventSourceModelImpl.OnGetEventSourceListener { + + private IEventSourceView view; + private EventSourceModelImpl actionModel; + + public EventSourcePresenterImpl(IEventSourceView sourceView) { + this.view = sourceView; + actionModel = new EventSourceModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(EventSourceBean resultBean) { + view.obtainEventSourceResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java new file mode 100644 index 0000000..045abc3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.HighEventModelImpl; +import com.casic.dcms.mvp.view.IHighEventView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class HighEventPresenterImpl extends BasePresenter implements IHighEventPresenter, HighEventModelImpl.OnGetHighEventListener { + + private IHighEventView view; + private HighEventModelImpl actionModel; + + public HighEventPresenterImpl(IHighEventView highEventView) { + this.view = highEventView; + actionModel = new HighEventModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(Object resultBean) { + view.obtainHighEventResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java new file mode 100644 index 0000000..8d45793 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IEventSourcePresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java new file mode 100644 index 0000000..d2d85fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IHighEventPresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java new file mode 100644 index 0000000..b22af01 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.EventSourceBean; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:48 + * @email : 290677893@qq.com + **/ +public interface IEventSourceView { + void obtainEventSourceResult(EventSourceBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java new file mode 100644 index 0000000..505ab6b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java @@ -0,0 +1,10 @@ +package com.casic.dcms.mvp.view; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:06 + * @email : 290677893@qq.com + **/ +public interface IHighEventView { + void obtainHighEventResult(Object resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 1f959b0..a513a5b 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -1,6 +1,7 @@ package com.casic.dcms.ui; import android.content.Context; +import android.content.Intent; import android.view.View; import android.widget.ImageView; import android.widget.TextView; @@ -14,6 +15,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; import com.jzxiang.pickerview.TimePickerDialog; @@ -71,16 +73,18 @@ adapter.setOnGridItemClickListener(new AnalysisRecycleAdapter.OnGridItemClickListener() { @Override public void onClick(int position) { -// Intent intent = new Intent(); + Intent intent = new Intent(); switch (position) { case 0: - ToastHelper.showToast("问题来源", ToastHelper.INFO); + intent.setClass(context, EventSourceActivity.class); + startActivity(intent); break; case 1: ToastHelper.showToast("案卷状态", ToastHelper.INFO); break; case 2: - ToastHelper.showToast("高发问题", ToastHelper.INFO); + intent.setClass(context, HighEventListActivity.class); + startActivity(intent); break; case 3: ToastHelper.showToast("街道统计", ToastHelper.INFO); @@ -113,10 +117,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - startDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + startDateView.setText(date); + SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: @@ -124,10 +131,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - endDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + endDateView.setText(date); + SaveKeyValues.putValue("endTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; default: diff --git a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java new file mode 100644 index 0000000..019a9dc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java @@ -0,0 +1,76 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.viewpager.widget.ViewPager; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.ui.fragment.ExcelFragment; +import com.casic.dcms.ui.fragment.PieChartFragment; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + **/ +public class EventSourceActivity extends BaseActivity { + + private static final String[] pageTitles = {"表格", "饼状图"}; + @BindView(R.id.resourceTopLayout) + QMUITopBarLayout resourceTopLayout; + @BindView(R.id.eventTabLayout) + TabLayout eventTabLayout; + @BindView(R.id.eventViewPager) + ViewPager eventViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_event_resource; + } + + @Override + protected void setupTopBarLayout() { + resourceTopLayout.setTitle("问题来源").setTextColor(ContextCompat.getColor(this, R.color.white)); + resourceTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + resourceTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); + fragmentList.add(new ExcelFragment()); + fragmentList.add(new PieChartFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); + eventViewPager.setAdapter(adapter); + //绑定TabLayout + eventTabLayout.setupWithViewPager(eventViewPager); + LinearLayout linearLayout = (LinearLayout) eventTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java new file mode 100644 index 0000000..e27d0b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java @@ -0,0 +1,77 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.mvp.presenter.HighEventPresenterImpl; +import com.casic.dcms.mvp.view.IHighEventView; +import com.casic.dcms.utils.SaveKeyValues; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 8:44 + * @email : 290677893@qq.com + **/ +public class HighEventListActivity extends BaseActivity implements IHighEventView { + + private static final String TAG = "HighEventListActivity"; + @BindView(R.id.highEventTopLayout) + QMUITopBarLayout highEventTopLayout; + @BindView(R.id.contentView) + TextView contentView; + + private HighEventPresenterImpl highEventPresenter; + private String begTime; + private String endTime; + + @Override + public int initLayoutView() { + return R.layout.activity_high_event; + } + + @Override + protected void setupTopBarLayout() { + highEventTopLayout.setTitle("高发问题").setTextColor(ContextCompat.getColor(this, R.color.white)); + highEventTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + highEventTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + begTime = (String) SaveKeyValues.getValue("begTime", ""); + endTime = (String) SaveKeyValues.getValue("endTime", ""); + highEventPresenter = new HighEventPresenterImpl(this); + } + + @Override + public void initEvent() { + highEventPresenter.onReadyRetrofitRequest(begTime, endTime); + } + + @Override + public void obtainHighEventResult(Object resultBean) { +// Log.d(TAG, "obtainHighEventResult: " + new Gson().toJson(resultBean)); + contentView.setText(new Gson().toJson(resultBean)); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (highEventPresenter != null) { + highEventPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/mvp/model/EventSourceModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java new file mode 100644 index 0000000..cc3d4d7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:53 + * @email : 290677893@qq.com + **/ +public class EventSourceModelImpl implements IEventSourceModel { + + private OnGetEventSourceListener listener; + + public EventSourceModelImpl(OnGetEventSourceListener sourceListener) { + this.listener = sourceListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetEventSourceListener { + void onSuccess(EventSourceBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getEventSourceResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(EventSourceBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java new file mode 100644 index 0000000..d470ab3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java @@ -0,0 +1,57 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public class HighEventModelImpl implements IHighEventModel { + + private OnGetHighEventListener listener; + + public HighEventModelImpl(OnGetHighEventListener highEventListener) { + this.listener = highEventListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetHighEventListener { + void onSuccess(Object resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getHighEventResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(Object resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java new file mode 100644 index 0000000..ad5709a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IEventSourceModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java new file mode 100644 index 0000000..c86a82a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IHighEventModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java new file mode 100644 index 0000000..bc6c382 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.EventSourceModelImpl; +import com.casic.dcms.mvp.view.IEventSourceView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class EventSourcePresenterImpl extends BasePresenter implements IEventSourcePresenter, EventSourceModelImpl.OnGetEventSourceListener { + + private IEventSourceView view; + private EventSourceModelImpl actionModel; + + public EventSourcePresenterImpl(IEventSourceView sourceView) { + this.view = sourceView; + actionModel = new EventSourceModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(EventSourceBean resultBean) { + view.obtainEventSourceResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java new file mode 100644 index 0000000..045abc3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.HighEventModelImpl; +import com.casic.dcms.mvp.view.IHighEventView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class HighEventPresenterImpl extends BasePresenter implements IHighEventPresenter, HighEventModelImpl.OnGetHighEventListener { + + private IHighEventView view; + private HighEventModelImpl actionModel; + + public HighEventPresenterImpl(IHighEventView highEventView) { + this.view = highEventView; + actionModel = new HighEventModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(Object resultBean) { + view.obtainHighEventResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java new file mode 100644 index 0000000..8d45793 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IEventSourcePresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java new file mode 100644 index 0000000..d2d85fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IHighEventPresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java new file mode 100644 index 0000000..b22af01 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.EventSourceBean; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:48 + * @email : 290677893@qq.com + **/ +public interface IEventSourceView { + void obtainEventSourceResult(EventSourceBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java new file mode 100644 index 0000000..505ab6b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java @@ -0,0 +1,10 @@ +package com.casic.dcms.mvp.view; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:06 + * @email : 290677893@qq.com + **/ +public interface IHighEventView { + void obtainHighEventResult(Object resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 1f959b0..a513a5b 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -1,6 +1,7 @@ package com.casic.dcms.ui; import android.content.Context; +import android.content.Intent; import android.view.View; import android.widget.ImageView; import android.widget.TextView; @@ -14,6 +15,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; import com.jzxiang.pickerview.TimePickerDialog; @@ -71,16 +73,18 @@ adapter.setOnGridItemClickListener(new AnalysisRecycleAdapter.OnGridItemClickListener() { @Override public void onClick(int position) { -// Intent intent = new Intent(); + Intent intent = new Intent(); switch (position) { case 0: - ToastHelper.showToast("问题来源", ToastHelper.INFO); + intent.setClass(context, EventSourceActivity.class); + startActivity(intent); break; case 1: ToastHelper.showToast("案卷状态", ToastHelper.INFO); break; case 2: - ToastHelper.showToast("高发问题", ToastHelper.INFO); + intent.setClass(context, HighEventListActivity.class); + startActivity(intent); break; case 3: ToastHelper.showToast("街道统计", ToastHelper.INFO); @@ -113,10 +117,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - startDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + startDateView.setText(date); + SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: @@ -124,10 +131,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - endDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + endDateView.setText(date); + SaveKeyValues.putValue("endTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; default: diff --git a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java new file mode 100644 index 0000000..019a9dc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java @@ -0,0 +1,76 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.viewpager.widget.ViewPager; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.ui.fragment.ExcelFragment; +import com.casic.dcms.ui.fragment.PieChartFragment; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + **/ +public class EventSourceActivity extends BaseActivity { + + private static final String[] pageTitles = {"表格", "饼状图"}; + @BindView(R.id.resourceTopLayout) + QMUITopBarLayout resourceTopLayout; + @BindView(R.id.eventTabLayout) + TabLayout eventTabLayout; + @BindView(R.id.eventViewPager) + ViewPager eventViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_event_resource; + } + + @Override + protected void setupTopBarLayout() { + resourceTopLayout.setTitle("问题来源").setTextColor(ContextCompat.getColor(this, R.color.white)); + resourceTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + resourceTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); + fragmentList.add(new ExcelFragment()); + fragmentList.add(new PieChartFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); + eventViewPager.setAdapter(adapter); + //绑定TabLayout + eventTabLayout.setupWithViewPager(eventViewPager); + LinearLayout linearLayout = (LinearLayout) eventTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java new file mode 100644 index 0000000..e27d0b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java @@ -0,0 +1,77 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.mvp.presenter.HighEventPresenterImpl; +import com.casic.dcms.mvp.view.IHighEventView; +import com.casic.dcms.utils.SaveKeyValues; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 8:44 + * @email : 290677893@qq.com + **/ +public class HighEventListActivity extends BaseActivity implements IHighEventView { + + private static final String TAG = "HighEventListActivity"; + @BindView(R.id.highEventTopLayout) + QMUITopBarLayout highEventTopLayout; + @BindView(R.id.contentView) + TextView contentView; + + private HighEventPresenterImpl highEventPresenter; + private String begTime; + private String endTime; + + @Override + public int initLayoutView() { + return R.layout.activity_high_event; + } + + @Override + protected void setupTopBarLayout() { + highEventTopLayout.setTitle("高发问题").setTextColor(ContextCompat.getColor(this, R.color.white)); + highEventTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + highEventTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + begTime = (String) SaveKeyValues.getValue("begTime", ""); + endTime = (String) SaveKeyValues.getValue("endTime", ""); + highEventPresenter = new HighEventPresenterImpl(this); + } + + @Override + public void initEvent() { + highEventPresenter.onReadyRetrofitRequest(begTime, endTime); + } + + @Override + public void obtainHighEventResult(Object resultBean) { +// Log.d(TAG, "obtainHighEventResult: " + new Gson().toJson(resultBean)); + contentView.setText(new Gson().toJson(resultBean)); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (highEventPresenter != null) { + highEventPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index 9d64c11..62d4aa2 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -5,16 +5,13 @@ import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; import com.casic.dcms.base.BaseFragment; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.tabs.TabLayout; -import org.jetbrains.annotations.NotNull; - import java.util.ArrayList; import java.util.List; @@ -29,7 +26,6 @@ NoScrollViewPager dashboardViewPager; private Context context; - private List fragmentList; @Override protected int initLayoutView() { @@ -43,10 +39,10 @@ @Override protected void initData() { - fragmentList = new ArrayList<>(); + List fragmentList = new ArrayList<>(); fragmentList.add(new UnreadFragment()); fragmentList.add(new ReadFragment()); - SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager(), pageTitles, fragmentList); dashboardViewPager.setAdapter(adapter); //绑定TabLayout topTabLayout.setupWithViewPager(dashboardViewPager); @@ -59,27 +55,4 @@ protected void initEvent() { } - - class SubViewPagerAdapter extends FragmentPagerAdapter { - - SubViewPagerAdapter(FragmentManager fm) { - super(fm); - } - - @NotNull - @Override - public Fragment getItem(int position) { - return fragmentList.get(position); - } - - @Override - public int getCount() { - return fragmentList.size(); - } - - @Override - public CharSequence getPageTitle(int position) { - return pageTitles[position]; - } - } } diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/mvp/model/EventSourceModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java new file mode 100644 index 0000000..cc3d4d7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:53 + * @email : 290677893@qq.com + **/ +public class EventSourceModelImpl implements IEventSourceModel { + + private OnGetEventSourceListener listener; + + public EventSourceModelImpl(OnGetEventSourceListener sourceListener) { + this.listener = sourceListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetEventSourceListener { + void onSuccess(EventSourceBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getEventSourceResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(EventSourceBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java new file mode 100644 index 0000000..d470ab3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java @@ -0,0 +1,57 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public class HighEventModelImpl implements IHighEventModel { + + private OnGetHighEventListener listener; + + public HighEventModelImpl(OnGetHighEventListener highEventListener) { + this.listener = highEventListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetHighEventListener { + void onSuccess(Object resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getHighEventResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(Object resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java new file mode 100644 index 0000000..ad5709a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IEventSourceModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java new file mode 100644 index 0000000..c86a82a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IHighEventModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java new file mode 100644 index 0000000..bc6c382 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.EventSourceModelImpl; +import com.casic.dcms.mvp.view.IEventSourceView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class EventSourcePresenterImpl extends BasePresenter implements IEventSourcePresenter, EventSourceModelImpl.OnGetEventSourceListener { + + private IEventSourceView view; + private EventSourceModelImpl actionModel; + + public EventSourcePresenterImpl(IEventSourceView sourceView) { + this.view = sourceView; + actionModel = new EventSourceModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(EventSourceBean resultBean) { + view.obtainEventSourceResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java new file mode 100644 index 0000000..045abc3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.HighEventModelImpl; +import com.casic.dcms.mvp.view.IHighEventView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class HighEventPresenterImpl extends BasePresenter implements IHighEventPresenter, HighEventModelImpl.OnGetHighEventListener { + + private IHighEventView view; + private HighEventModelImpl actionModel; + + public HighEventPresenterImpl(IHighEventView highEventView) { + this.view = highEventView; + actionModel = new HighEventModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(Object resultBean) { + view.obtainHighEventResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java new file mode 100644 index 0000000..8d45793 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IEventSourcePresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java new file mode 100644 index 0000000..d2d85fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IHighEventPresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java new file mode 100644 index 0000000..b22af01 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.EventSourceBean; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:48 + * @email : 290677893@qq.com + **/ +public interface IEventSourceView { + void obtainEventSourceResult(EventSourceBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java new file mode 100644 index 0000000..505ab6b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java @@ -0,0 +1,10 @@ +package com.casic.dcms.mvp.view; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:06 + * @email : 290677893@qq.com + **/ +public interface IHighEventView { + void obtainHighEventResult(Object resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 1f959b0..a513a5b 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -1,6 +1,7 @@ package com.casic.dcms.ui; import android.content.Context; +import android.content.Intent; import android.view.View; import android.widget.ImageView; import android.widget.TextView; @@ -14,6 +15,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; import com.jzxiang.pickerview.TimePickerDialog; @@ -71,16 +73,18 @@ adapter.setOnGridItemClickListener(new AnalysisRecycleAdapter.OnGridItemClickListener() { @Override public void onClick(int position) { -// Intent intent = new Intent(); + Intent intent = new Intent(); switch (position) { case 0: - ToastHelper.showToast("问题来源", ToastHelper.INFO); + intent.setClass(context, EventSourceActivity.class); + startActivity(intent); break; case 1: ToastHelper.showToast("案卷状态", ToastHelper.INFO); break; case 2: - ToastHelper.showToast("高发问题", ToastHelper.INFO); + intent.setClass(context, HighEventListActivity.class); + startActivity(intent); break; case 3: ToastHelper.showToast("街道统计", ToastHelper.INFO); @@ -113,10 +117,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - startDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + startDateView.setText(date); + SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: @@ -124,10 +131,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - endDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + endDateView.setText(date); + SaveKeyValues.putValue("endTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; default: diff --git a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java new file mode 100644 index 0000000..019a9dc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java @@ -0,0 +1,76 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.viewpager.widget.ViewPager; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.ui.fragment.ExcelFragment; +import com.casic.dcms.ui.fragment.PieChartFragment; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + **/ +public class EventSourceActivity extends BaseActivity { + + private static final String[] pageTitles = {"表格", "饼状图"}; + @BindView(R.id.resourceTopLayout) + QMUITopBarLayout resourceTopLayout; + @BindView(R.id.eventTabLayout) + TabLayout eventTabLayout; + @BindView(R.id.eventViewPager) + ViewPager eventViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_event_resource; + } + + @Override + protected void setupTopBarLayout() { + resourceTopLayout.setTitle("问题来源").setTextColor(ContextCompat.getColor(this, R.color.white)); + resourceTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + resourceTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); + fragmentList.add(new ExcelFragment()); + fragmentList.add(new PieChartFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); + eventViewPager.setAdapter(adapter); + //绑定TabLayout + eventTabLayout.setupWithViewPager(eventViewPager); + LinearLayout linearLayout = (LinearLayout) eventTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java new file mode 100644 index 0000000..e27d0b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java @@ -0,0 +1,77 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.mvp.presenter.HighEventPresenterImpl; +import com.casic.dcms.mvp.view.IHighEventView; +import com.casic.dcms.utils.SaveKeyValues; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 8:44 + * @email : 290677893@qq.com + **/ +public class HighEventListActivity extends BaseActivity implements IHighEventView { + + private static final String TAG = "HighEventListActivity"; + @BindView(R.id.highEventTopLayout) + QMUITopBarLayout highEventTopLayout; + @BindView(R.id.contentView) + TextView contentView; + + private HighEventPresenterImpl highEventPresenter; + private String begTime; + private String endTime; + + @Override + public int initLayoutView() { + return R.layout.activity_high_event; + } + + @Override + protected void setupTopBarLayout() { + highEventTopLayout.setTitle("高发问题").setTextColor(ContextCompat.getColor(this, R.color.white)); + highEventTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + highEventTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + begTime = (String) SaveKeyValues.getValue("begTime", ""); + endTime = (String) SaveKeyValues.getValue("endTime", ""); + highEventPresenter = new HighEventPresenterImpl(this); + } + + @Override + public void initEvent() { + highEventPresenter.onReadyRetrofitRequest(begTime, endTime); + } + + @Override + public void obtainHighEventResult(Object resultBean) { +// Log.d(TAG, "obtainHighEventResult: " + new Gson().toJson(resultBean)); + contentView.setText(new Gson().toJson(resultBean)); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (highEventPresenter != null) { + highEventPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index 9d64c11..62d4aa2 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -5,16 +5,13 @@ import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; import com.casic.dcms.base.BaseFragment; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.tabs.TabLayout; -import org.jetbrains.annotations.NotNull; - import java.util.ArrayList; import java.util.List; @@ -29,7 +26,6 @@ NoScrollViewPager dashboardViewPager; private Context context; - private List fragmentList; @Override protected int initLayoutView() { @@ -43,10 +39,10 @@ @Override protected void initData() { - fragmentList = new ArrayList<>(); + List fragmentList = new ArrayList<>(); fragmentList.add(new UnreadFragment()); fragmentList.add(new ReadFragment()); - SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager(), pageTitles, fragmentList); dashboardViewPager.setAdapter(adapter); //绑定TabLayout topTabLayout.setupWithViewPager(dashboardViewPager); @@ -59,27 +55,4 @@ protected void initEvent() { } - - class SubViewPagerAdapter extends FragmentPagerAdapter { - - SubViewPagerAdapter(FragmentManager fm) { - super(fm); - } - - @NotNull - @Override - public Fragment getItem(int position) { - return fragmentList.get(position); - } - - @Override - public int getCount() { - return fragmentList.size(); - } - - @Override - public CharSequence getPageTitle(int position) { - return pageTitles[position]; - } - } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java new file mode 100644 index 0000000..3da2fe2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:42 + * @email : 290677893@qq.com + **/ +public class ExcelFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_excel; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/mvp/model/EventSourceModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java new file mode 100644 index 0000000..cc3d4d7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:53 + * @email : 290677893@qq.com + **/ +public class EventSourceModelImpl implements IEventSourceModel { + + private OnGetEventSourceListener listener; + + public EventSourceModelImpl(OnGetEventSourceListener sourceListener) { + this.listener = sourceListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetEventSourceListener { + void onSuccess(EventSourceBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getEventSourceResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(EventSourceBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java new file mode 100644 index 0000000..d470ab3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java @@ -0,0 +1,57 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public class HighEventModelImpl implements IHighEventModel { + + private OnGetHighEventListener listener; + + public HighEventModelImpl(OnGetHighEventListener highEventListener) { + this.listener = highEventListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetHighEventListener { + void onSuccess(Object resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getHighEventResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(Object resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java new file mode 100644 index 0000000..ad5709a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IEventSourceModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java new file mode 100644 index 0000000..c86a82a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IHighEventModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java new file mode 100644 index 0000000..bc6c382 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.EventSourceModelImpl; +import com.casic.dcms.mvp.view.IEventSourceView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class EventSourcePresenterImpl extends BasePresenter implements IEventSourcePresenter, EventSourceModelImpl.OnGetEventSourceListener { + + private IEventSourceView view; + private EventSourceModelImpl actionModel; + + public EventSourcePresenterImpl(IEventSourceView sourceView) { + this.view = sourceView; + actionModel = new EventSourceModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(EventSourceBean resultBean) { + view.obtainEventSourceResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java new file mode 100644 index 0000000..045abc3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.HighEventModelImpl; +import com.casic.dcms.mvp.view.IHighEventView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class HighEventPresenterImpl extends BasePresenter implements IHighEventPresenter, HighEventModelImpl.OnGetHighEventListener { + + private IHighEventView view; + private HighEventModelImpl actionModel; + + public HighEventPresenterImpl(IHighEventView highEventView) { + this.view = highEventView; + actionModel = new HighEventModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(Object resultBean) { + view.obtainHighEventResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java new file mode 100644 index 0000000..8d45793 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IEventSourcePresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java new file mode 100644 index 0000000..d2d85fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IHighEventPresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java new file mode 100644 index 0000000..b22af01 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.EventSourceBean; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:48 + * @email : 290677893@qq.com + **/ +public interface IEventSourceView { + void obtainEventSourceResult(EventSourceBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java new file mode 100644 index 0000000..505ab6b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java @@ -0,0 +1,10 @@ +package com.casic.dcms.mvp.view; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:06 + * @email : 290677893@qq.com + **/ +public interface IHighEventView { + void obtainHighEventResult(Object resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 1f959b0..a513a5b 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -1,6 +1,7 @@ package com.casic.dcms.ui; import android.content.Context; +import android.content.Intent; import android.view.View; import android.widget.ImageView; import android.widget.TextView; @@ -14,6 +15,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; import com.jzxiang.pickerview.TimePickerDialog; @@ -71,16 +73,18 @@ adapter.setOnGridItemClickListener(new AnalysisRecycleAdapter.OnGridItemClickListener() { @Override public void onClick(int position) { -// Intent intent = new Intent(); + Intent intent = new Intent(); switch (position) { case 0: - ToastHelper.showToast("问题来源", ToastHelper.INFO); + intent.setClass(context, EventSourceActivity.class); + startActivity(intent); break; case 1: ToastHelper.showToast("案卷状态", ToastHelper.INFO); break; case 2: - ToastHelper.showToast("高发问题", ToastHelper.INFO); + intent.setClass(context, HighEventListActivity.class); + startActivity(intent); break; case 3: ToastHelper.showToast("街道统计", ToastHelper.INFO); @@ -113,10 +117,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - startDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + startDateView.setText(date); + SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: @@ -124,10 +131,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - endDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + endDateView.setText(date); + SaveKeyValues.putValue("endTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; default: diff --git a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java new file mode 100644 index 0000000..019a9dc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java @@ -0,0 +1,76 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.viewpager.widget.ViewPager; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.ui.fragment.ExcelFragment; +import com.casic.dcms.ui.fragment.PieChartFragment; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + **/ +public class EventSourceActivity extends BaseActivity { + + private static final String[] pageTitles = {"表格", "饼状图"}; + @BindView(R.id.resourceTopLayout) + QMUITopBarLayout resourceTopLayout; + @BindView(R.id.eventTabLayout) + TabLayout eventTabLayout; + @BindView(R.id.eventViewPager) + ViewPager eventViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_event_resource; + } + + @Override + protected void setupTopBarLayout() { + resourceTopLayout.setTitle("问题来源").setTextColor(ContextCompat.getColor(this, R.color.white)); + resourceTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + resourceTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); + fragmentList.add(new ExcelFragment()); + fragmentList.add(new PieChartFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); + eventViewPager.setAdapter(adapter); + //绑定TabLayout + eventTabLayout.setupWithViewPager(eventViewPager); + LinearLayout linearLayout = (LinearLayout) eventTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java new file mode 100644 index 0000000..e27d0b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java @@ -0,0 +1,77 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.mvp.presenter.HighEventPresenterImpl; +import com.casic.dcms.mvp.view.IHighEventView; +import com.casic.dcms.utils.SaveKeyValues; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 8:44 + * @email : 290677893@qq.com + **/ +public class HighEventListActivity extends BaseActivity implements IHighEventView { + + private static final String TAG = "HighEventListActivity"; + @BindView(R.id.highEventTopLayout) + QMUITopBarLayout highEventTopLayout; + @BindView(R.id.contentView) + TextView contentView; + + private HighEventPresenterImpl highEventPresenter; + private String begTime; + private String endTime; + + @Override + public int initLayoutView() { + return R.layout.activity_high_event; + } + + @Override + protected void setupTopBarLayout() { + highEventTopLayout.setTitle("高发问题").setTextColor(ContextCompat.getColor(this, R.color.white)); + highEventTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + highEventTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + begTime = (String) SaveKeyValues.getValue("begTime", ""); + endTime = (String) SaveKeyValues.getValue("endTime", ""); + highEventPresenter = new HighEventPresenterImpl(this); + } + + @Override + public void initEvent() { + highEventPresenter.onReadyRetrofitRequest(begTime, endTime); + } + + @Override + public void obtainHighEventResult(Object resultBean) { +// Log.d(TAG, "obtainHighEventResult: " + new Gson().toJson(resultBean)); + contentView.setText(new Gson().toJson(resultBean)); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (highEventPresenter != null) { + highEventPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index 9d64c11..62d4aa2 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -5,16 +5,13 @@ import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; import com.casic.dcms.base.BaseFragment; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.tabs.TabLayout; -import org.jetbrains.annotations.NotNull; - import java.util.ArrayList; import java.util.List; @@ -29,7 +26,6 @@ NoScrollViewPager dashboardViewPager; private Context context; - private List fragmentList; @Override protected int initLayoutView() { @@ -43,10 +39,10 @@ @Override protected void initData() { - fragmentList = new ArrayList<>(); + List fragmentList = new ArrayList<>(); fragmentList.add(new UnreadFragment()); fragmentList.add(new ReadFragment()); - SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager(), pageTitles, fragmentList); dashboardViewPager.setAdapter(adapter); //绑定TabLayout topTabLayout.setupWithViewPager(dashboardViewPager); @@ -59,27 +55,4 @@ protected void initEvent() { } - - class SubViewPagerAdapter extends FragmentPagerAdapter { - - SubViewPagerAdapter(FragmentManager fm) { - super(fm); - } - - @NotNull - @Override - public Fragment getItem(int position) { - return fragmentList.get(position); - } - - @Override - public int getCount() { - return fragmentList.size(); - } - - @Override - public CharSequence getPageTitle(int position) { - return pageTitles[position]; - } - } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java new file mode 100644 index 0000000..3da2fe2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:42 + * @email : 290677893@qq.com + **/ +public class ExcelFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_excel; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java new file mode 100644 index 0000000..3afb0b8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java @@ -0,0 +1,139 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.graphics.Color; +import android.text.TextUtils; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.presenter.EventSourcePresenterImpl; +import com.casic.dcms.mvp.view.IEventSourceView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.ToastHelper; +import com.github.mikephil.charting.charts.PieChart; +import com.github.mikephil.charting.components.Legend; +import com.github.mikephil.charting.data.PieData; +import com.github.mikephil.charting.data.PieDataSet; +import com.github.mikephil.charting.data.PieEntry; +import com.github.mikephil.charting.formatter.PercentFormatter; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:43 + * @email : 290677893@qq.com + **/ +public class PieChartFragment extends BaseFragment implements IEventSourceView { + + private static final String TAG = "PieChartFragment"; + @BindView(R.id.pieChartView) + PieChart pieChartView; + + private Context context; + private EventSourcePresenterImpl eventSourcePresenter; + private List entries; + private String begTime; + private String endTime; + + @Override + protected int initLayoutView() { + return R.layout.fragment_chart; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + begTime = (String) SaveKeyValues.getValue("begTime", ""); + endTime = (String) SaveKeyValues.getValue("endTime", ""); + eventSourcePresenter = new EventSourcePresenterImpl(this); + entries = new ArrayList<>(); + } + + @Override + protected void initEvent() { + if (TextUtils.isEmpty(begTime) || TextUtils.isEmpty(endTime)) { + ToastHelper.showToast("起始时间或者结束时间不对", ToastHelper.ERROR); + return; + } + eventSourcePresenter.onReadyRetrofitRequest(begTime, endTime); + } + + @Override + public void obtainEventSourceResult(EventSourceBean resultBean) { + //将统计数据存本地,提供给表/图页面使用 +// Log.d(TAG, "obtainEventSourceResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeanList = resultBean.getData(); + for (EventSourceBean.DataBean dataBean : dataBeanList) { + float eventNum = Float.parseFloat(dataBean.getEventNum()); + if (eventNum != 0) { + entries.add(new PieEntry(eventNum, dataBean.getCaseSource())); + } + } + initPieChart(); + } + } + + private void initPieChart() { + pieChartView.setDragDecelerationFrictionCoef(0.95f); + pieChartView.setDrawCenterText(false); + pieChartView.getDescription().setEnabled(false); + pieChartView.setRotationAngle(0); + // enable rotation of the chart by touch + pieChartView.setRotationEnabled(true); + pieChartView.setHighlightPerTapEnabled(true); + pieChartView.setDrawEntryLabels(true); + pieChartView.setDrawHoleEnabled(false); + setChartData(); + pieChartView.animateY(1000); + + Legend l = pieChartView.getLegend(); + l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); + l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT); + l.setOrientation(Legend.LegendOrientation.VERTICAL); + l.setDrawInside(false); + l.setXEntrySpace(7f); + l.setYEntrySpace(1f); + l.setYOffset(0f); + // entry label styling + pieChartView.setEntryLabelColor(Color.BLUE); + pieChartView.setEntryLabelTextSize(12f); + pieChartView.setExtraOffsets(30, 30, 30, 30); + } + + private void setChartData() { + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f); + dataSet.setSelectionShift(5f); + dataSet.setColors(Constant.PIE_COLORS); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.GREEN); + dataSet.setValueLinePart1Length(0.6f); + PieData data = new PieData(dataSet); + data.setValueFormatter(new PercentFormatter()); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); + pieChartView.setData(data); + pieChartView.highlightValues(null); + pieChartView.invalidate(); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (eventSourcePresenter != null) { + eventSourcePresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/mvp/model/EventSourceModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java new file mode 100644 index 0000000..cc3d4d7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:53 + * @email : 290677893@qq.com + **/ +public class EventSourceModelImpl implements IEventSourceModel { + + private OnGetEventSourceListener listener; + + public EventSourceModelImpl(OnGetEventSourceListener sourceListener) { + this.listener = sourceListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetEventSourceListener { + void onSuccess(EventSourceBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getEventSourceResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(EventSourceBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java new file mode 100644 index 0000000..d470ab3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java @@ -0,0 +1,57 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public class HighEventModelImpl implements IHighEventModel { + + private OnGetHighEventListener listener; + + public HighEventModelImpl(OnGetHighEventListener highEventListener) { + this.listener = highEventListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetHighEventListener { + void onSuccess(Object resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getHighEventResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(Object resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java new file mode 100644 index 0000000..ad5709a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IEventSourceModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java new file mode 100644 index 0000000..c86a82a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IHighEventModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java new file mode 100644 index 0000000..bc6c382 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.EventSourceModelImpl; +import com.casic.dcms.mvp.view.IEventSourceView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class EventSourcePresenterImpl extends BasePresenter implements IEventSourcePresenter, EventSourceModelImpl.OnGetEventSourceListener { + + private IEventSourceView view; + private EventSourceModelImpl actionModel; + + public EventSourcePresenterImpl(IEventSourceView sourceView) { + this.view = sourceView; + actionModel = new EventSourceModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(EventSourceBean resultBean) { + view.obtainEventSourceResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java new file mode 100644 index 0000000..045abc3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.HighEventModelImpl; +import com.casic.dcms.mvp.view.IHighEventView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class HighEventPresenterImpl extends BasePresenter implements IHighEventPresenter, HighEventModelImpl.OnGetHighEventListener { + + private IHighEventView view; + private HighEventModelImpl actionModel; + + public HighEventPresenterImpl(IHighEventView highEventView) { + this.view = highEventView; + actionModel = new HighEventModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(Object resultBean) { + view.obtainHighEventResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java new file mode 100644 index 0000000..8d45793 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IEventSourcePresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java new file mode 100644 index 0000000..d2d85fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IHighEventPresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java new file mode 100644 index 0000000..b22af01 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.EventSourceBean; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:48 + * @email : 290677893@qq.com + **/ +public interface IEventSourceView { + void obtainEventSourceResult(EventSourceBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java new file mode 100644 index 0000000..505ab6b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java @@ -0,0 +1,10 @@ +package com.casic.dcms.mvp.view; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:06 + * @email : 290677893@qq.com + **/ +public interface IHighEventView { + void obtainHighEventResult(Object resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 1f959b0..a513a5b 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -1,6 +1,7 @@ package com.casic.dcms.ui; import android.content.Context; +import android.content.Intent; import android.view.View; import android.widget.ImageView; import android.widget.TextView; @@ -14,6 +15,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; import com.jzxiang.pickerview.TimePickerDialog; @@ -71,16 +73,18 @@ adapter.setOnGridItemClickListener(new AnalysisRecycleAdapter.OnGridItemClickListener() { @Override public void onClick(int position) { -// Intent intent = new Intent(); + Intent intent = new Intent(); switch (position) { case 0: - ToastHelper.showToast("问题来源", ToastHelper.INFO); + intent.setClass(context, EventSourceActivity.class); + startActivity(intent); break; case 1: ToastHelper.showToast("案卷状态", ToastHelper.INFO); break; case 2: - ToastHelper.showToast("高发问题", ToastHelper.INFO); + intent.setClass(context, HighEventListActivity.class); + startActivity(intent); break; case 3: ToastHelper.showToast("街道统计", ToastHelper.INFO); @@ -113,10 +117,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - startDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + startDateView.setText(date); + SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: @@ -124,10 +131,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - endDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + endDateView.setText(date); + SaveKeyValues.putValue("endTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; default: diff --git a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java new file mode 100644 index 0000000..019a9dc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java @@ -0,0 +1,76 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.viewpager.widget.ViewPager; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.ui.fragment.ExcelFragment; +import com.casic.dcms.ui.fragment.PieChartFragment; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + **/ +public class EventSourceActivity extends BaseActivity { + + private static final String[] pageTitles = {"表格", "饼状图"}; + @BindView(R.id.resourceTopLayout) + QMUITopBarLayout resourceTopLayout; + @BindView(R.id.eventTabLayout) + TabLayout eventTabLayout; + @BindView(R.id.eventViewPager) + ViewPager eventViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_event_resource; + } + + @Override + protected void setupTopBarLayout() { + resourceTopLayout.setTitle("问题来源").setTextColor(ContextCompat.getColor(this, R.color.white)); + resourceTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + resourceTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); + fragmentList.add(new ExcelFragment()); + fragmentList.add(new PieChartFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); + eventViewPager.setAdapter(adapter); + //绑定TabLayout + eventTabLayout.setupWithViewPager(eventViewPager); + LinearLayout linearLayout = (LinearLayout) eventTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java new file mode 100644 index 0000000..e27d0b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java @@ -0,0 +1,77 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.mvp.presenter.HighEventPresenterImpl; +import com.casic.dcms.mvp.view.IHighEventView; +import com.casic.dcms.utils.SaveKeyValues; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 8:44 + * @email : 290677893@qq.com + **/ +public class HighEventListActivity extends BaseActivity implements IHighEventView { + + private static final String TAG = "HighEventListActivity"; + @BindView(R.id.highEventTopLayout) + QMUITopBarLayout highEventTopLayout; + @BindView(R.id.contentView) + TextView contentView; + + private HighEventPresenterImpl highEventPresenter; + private String begTime; + private String endTime; + + @Override + public int initLayoutView() { + return R.layout.activity_high_event; + } + + @Override + protected void setupTopBarLayout() { + highEventTopLayout.setTitle("高发问题").setTextColor(ContextCompat.getColor(this, R.color.white)); + highEventTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + highEventTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + begTime = (String) SaveKeyValues.getValue("begTime", ""); + endTime = (String) SaveKeyValues.getValue("endTime", ""); + highEventPresenter = new HighEventPresenterImpl(this); + } + + @Override + public void initEvent() { + highEventPresenter.onReadyRetrofitRequest(begTime, endTime); + } + + @Override + public void obtainHighEventResult(Object resultBean) { +// Log.d(TAG, "obtainHighEventResult: " + new Gson().toJson(resultBean)); + contentView.setText(new Gson().toJson(resultBean)); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (highEventPresenter != null) { + highEventPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index 9d64c11..62d4aa2 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -5,16 +5,13 @@ import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; import com.casic.dcms.base.BaseFragment; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.tabs.TabLayout; -import org.jetbrains.annotations.NotNull; - import java.util.ArrayList; import java.util.List; @@ -29,7 +26,6 @@ NoScrollViewPager dashboardViewPager; private Context context; - private List fragmentList; @Override protected int initLayoutView() { @@ -43,10 +39,10 @@ @Override protected void initData() { - fragmentList = new ArrayList<>(); + List fragmentList = new ArrayList<>(); fragmentList.add(new UnreadFragment()); fragmentList.add(new ReadFragment()); - SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager(), pageTitles, fragmentList); dashboardViewPager.setAdapter(adapter); //绑定TabLayout topTabLayout.setupWithViewPager(dashboardViewPager); @@ -59,27 +55,4 @@ protected void initEvent() { } - - class SubViewPagerAdapter extends FragmentPagerAdapter { - - SubViewPagerAdapter(FragmentManager fm) { - super(fm); - } - - @NotNull - @Override - public Fragment getItem(int position) { - return fragmentList.get(position); - } - - @Override - public int getCount() { - return fragmentList.size(); - } - - @Override - public CharSequence getPageTitle(int position) { - return pageTitles[position]; - } - } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java new file mode 100644 index 0000000..3da2fe2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:42 + * @email : 290677893@qq.com + **/ +public class ExcelFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_excel; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java new file mode 100644 index 0000000..3afb0b8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java @@ -0,0 +1,139 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.graphics.Color; +import android.text.TextUtils; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.presenter.EventSourcePresenterImpl; +import com.casic.dcms.mvp.view.IEventSourceView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.ToastHelper; +import com.github.mikephil.charting.charts.PieChart; +import com.github.mikephil.charting.components.Legend; +import com.github.mikephil.charting.data.PieData; +import com.github.mikephil.charting.data.PieDataSet; +import com.github.mikephil.charting.data.PieEntry; +import com.github.mikephil.charting.formatter.PercentFormatter; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:43 + * @email : 290677893@qq.com + **/ +public class PieChartFragment extends BaseFragment implements IEventSourceView { + + private static final String TAG = "PieChartFragment"; + @BindView(R.id.pieChartView) + PieChart pieChartView; + + private Context context; + private EventSourcePresenterImpl eventSourcePresenter; + private List entries; + private String begTime; + private String endTime; + + @Override + protected int initLayoutView() { + return R.layout.fragment_chart; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + begTime = (String) SaveKeyValues.getValue("begTime", ""); + endTime = (String) SaveKeyValues.getValue("endTime", ""); + eventSourcePresenter = new EventSourcePresenterImpl(this); + entries = new ArrayList<>(); + } + + @Override + protected void initEvent() { + if (TextUtils.isEmpty(begTime) || TextUtils.isEmpty(endTime)) { + ToastHelper.showToast("起始时间或者结束时间不对", ToastHelper.ERROR); + return; + } + eventSourcePresenter.onReadyRetrofitRequest(begTime, endTime); + } + + @Override + public void obtainEventSourceResult(EventSourceBean resultBean) { + //将统计数据存本地,提供给表/图页面使用 +// Log.d(TAG, "obtainEventSourceResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeanList = resultBean.getData(); + for (EventSourceBean.DataBean dataBean : dataBeanList) { + float eventNum = Float.parseFloat(dataBean.getEventNum()); + if (eventNum != 0) { + entries.add(new PieEntry(eventNum, dataBean.getCaseSource())); + } + } + initPieChart(); + } + } + + private void initPieChart() { + pieChartView.setDragDecelerationFrictionCoef(0.95f); + pieChartView.setDrawCenterText(false); + pieChartView.getDescription().setEnabled(false); + pieChartView.setRotationAngle(0); + // enable rotation of the chart by touch + pieChartView.setRotationEnabled(true); + pieChartView.setHighlightPerTapEnabled(true); + pieChartView.setDrawEntryLabels(true); + pieChartView.setDrawHoleEnabled(false); + setChartData(); + pieChartView.animateY(1000); + + Legend l = pieChartView.getLegend(); + l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); + l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT); + l.setOrientation(Legend.LegendOrientation.VERTICAL); + l.setDrawInside(false); + l.setXEntrySpace(7f); + l.setYEntrySpace(1f); + l.setYOffset(0f); + // entry label styling + pieChartView.setEntryLabelColor(Color.BLUE); + pieChartView.setEntryLabelTextSize(12f); + pieChartView.setExtraOffsets(30, 30, 30, 30); + } + + private void setChartData() { + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f); + dataSet.setSelectionShift(5f); + dataSet.setColors(Constant.PIE_COLORS); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.GREEN); + dataSet.setValueLinePart1Length(0.6f); + PieData data = new PieData(dataSet); + data.setValueFormatter(new PercentFormatter()); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); + pieChartView.setData(data); + pieChartView.highlightValues(null); + pieChartView.invalidate(); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (eventSourcePresenter != null) { + eventSourcePresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java index 00d8669..73f6799 100644 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java @@ -1,6 +1,9 @@ package com.casic.dcms.utils; import android.content.Context; +import android.graphics.Color; + +import java.util.Random; /** * @Author: Pengxh @@ -11,4 +14,15 @@ public static int getResourcesColor(Context context, int res) { return context.getResources().getColor(res); } + + /** + * 随机颜色 + */ + public static int getRandomColor() { + Random random = new Random(); + int red = random.nextInt(256); + int green = random.nextInt(256); + int blue = random.nextInt(256); + return Color.rgb(red, green, blue); + } } diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/mvp/model/EventSourceModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java new file mode 100644 index 0000000..cc3d4d7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:53 + * @email : 290677893@qq.com + **/ +public class EventSourceModelImpl implements IEventSourceModel { + + private OnGetEventSourceListener listener; + + public EventSourceModelImpl(OnGetEventSourceListener sourceListener) { + this.listener = sourceListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetEventSourceListener { + void onSuccess(EventSourceBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getEventSourceResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(EventSourceBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java new file mode 100644 index 0000000..d470ab3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java @@ -0,0 +1,57 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public class HighEventModelImpl implements IHighEventModel { + + private OnGetHighEventListener listener; + + public HighEventModelImpl(OnGetHighEventListener highEventListener) { + this.listener = highEventListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetHighEventListener { + void onSuccess(Object resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getHighEventResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(Object resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java new file mode 100644 index 0000000..ad5709a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IEventSourceModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java new file mode 100644 index 0000000..c86a82a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IHighEventModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java new file mode 100644 index 0000000..bc6c382 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.EventSourceModelImpl; +import com.casic.dcms.mvp.view.IEventSourceView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class EventSourcePresenterImpl extends BasePresenter implements IEventSourcePresenter, EventSourceModelImpl.OnGetEventSourceListener { + + private IEventSourceView view; + private EventSourceModelImpl actionModel; + + public EventSourcePresenterImpl(IEventSourceView sourceView) { + this.view = sourceView; + actionModel = new EventSourceModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(EventSourceBean resultBean) { + view.obtainEventSourceResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java new file mode 100644 index 0000000..045abc3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.HighEventModelImpl; +import com.casic.dcms.mvp.view.IHighEventView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class HighEventPresenterImpl extends BasePresenter implements IHighEventPresenter, HighEventModelImpl.OnGetHighEventListener { + + private IHighEventView view; + private HighEventModelImpl actionModel; + + public HighEventPresenterImpl(IHighEventView highEventView) { + this.view = highEventView; + actionModel = new HighEventModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(Object resultBean) { + view.obtainHighEventResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java new file mode 100644 index 0000000..8d45793 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IEventSourcePresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java new file mode 100644 index 0000000..d2d85fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IHighEventPresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java new file mode 100644 index 0000000..b22af01 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.EventSourceBean; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:48 + * @email : 290677893@qq.com + **/ +public interface IEventSourceView { + void obtainEventSourceResult(EventSourceBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java new file mode 100644 index 0000000..505ab6b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java @@ -0,0 +1,10 @@ +package com.casic.dcms.mvp.view; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:06 + * @email : 290677893@qq.com + **/ +public interface IHighEventView { + void obtainHighEventResult(Object resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 1f959b0..a513a5b 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -1,6 +1,7 @@ package com.casic.dcms.ui; import android.content.Context; +import android.content.Intent; import android.view.View; import android.widget.ImageView; import android.widget.TextView; @@ -14,6 +15,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; import com.jzxiang.pickerview.TimePickerDialog; @@ -71,16 +73,18 @@ adapter.setOnGridItemClickListener(new AnalysisRecycleAdapter.OnGridItemClickListener() { @Override public void onClick(int position) { -// Intent intent = new Intent(); + Intent intent = new Intent(); switch (position) { case 0: - ToastHelper.showToast("问题来源", ToastHelper.INFO); + intent.setClass(context, EventSourceActivity.class); + startActivity(intent); break; case 1: ToastHelper.showToast("案卷状态", ToastHelper.INFO); break; case 2: - ToastHelper.showToast("高发问题", ToastHelper.INFO); + intent.setClass(context, HighEventListActivity.class); + startActivity(intent); break; case 3: ToastHelper.showToast("街道统计", ToastHelper.INFO); @@ -113,10 +117,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - startDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + startDateView.setText(date); + SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: @@ -124,10 +131,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - endDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + endDateView.setText(date); + SaveKeyValues.putValue("endTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; default: diff --git a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java new file mode 100644 index 0000000..019a9dc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java @@ -0,0 +1,76 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.viewpager.widget.ViewPager; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.ui.fragment.ExcelFragment; +import com.casic.dcms.ui.fragment.PieChartFragment; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + **/ +public class EventSourceActivity extends BaseActivity { + + private static final String[] pageTitles = {"表格", "饼状图"}; + @BindView(R.id.resourceTopLayout) + QMUITopBarLayout resourceTopLayout; + @BindView(R.id.eventTabLayout) + TabLayout eventTabLayout; + @BindView(R.id.eventViewPager) + ViewPager eventViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_event_resource; + } + + @Override + protected void setupTopBarLayout() { + resourceTopLayout.setTitle("问题来源").setTextColor(ContextCompat.getColor(this, R.color.white)); + resourceTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + resourceTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); + fragmentList.add(new ExcelFragment()); + fragmentList.add(new PieChartFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); + eventViewPager.setAdapter(adapter); + //绑定TabLayout + eventTabLayout.setupWithViewPager(eventViewPager); + LinearLayout linearLayout = (LinearLayout) eventTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java new file mode 100644 index 0000000..e27d0b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java @@ -0,0 +1,77 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.mvp.presenter.HighEventPresenterImpl; +import com.casic.dcms.mvp.view.IHighEventView; +import com.casic.dcms.utils.SaveKeyValues; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 8:44 + * @email : 290677893@qq.com + **/ +public class HighEventListActivity extends BaseActivity implements IHighEventView { + + private static final String TAG = "HighEventListActivity"; + @BindView(R.id.highEventTopLayout) + QMUITopBarLayout highEventTopLayout; + @BindView(R.id.contentView) + TextView contentView; + + private HighEventPresenterImpl highEventPresenter; + private String begTime; + private String endTime; + + @Override + public int initLayoutView() { + return R.layout.activity_high_event; + } + + @Override + protected void setupTopBarLayout() { + highEventTopLayout.setTitle("高发问题").setTextColor(ContextCompat.getColor(this, R.color.white)); + highEventTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + highEventTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + begTime = (String) SaveKeyValues.getValue("begTime", ""); + endTime = (String) SaveKeyValues.getValue("endTime", ""); + highEventPresenter = new HighEventPresenterImpl(this); + } + + @Override + public void initEvent() { + highEventPresenter.onReadyRetrofitRequest(begTime, endTime); + } + + @Override + public void obtainHighEventResult(Object resultBean) { +// Log.d(TAG, "obtainHighEventResult: " + new Gson().toJson(resultBean)); + contentView.setText(new Gson().toJson(resultBean)); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (highEventPresenter != null) { + highEventPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index 9d64c11..62d4aa2 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -5,16 +5,13 @@ import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; import com.casic.dcms.base.BaseFragment; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.tabs.TabLayout; -import org.jetbrains.annotations.NotNull; - import java.util.ArrayList; import java.util.List; @@ -29,7 +26,6 @@ NoScrollViewPager dashboardViewPager; private Context context; - private List fragmentList; @Override protected int initLayoutView() { @@ -43,10 +39,10 @@ @Override protected void initData() { - fragmentList = new ArrayList<>(); + List fragmentList = new ArrayList<>(); fragmentList.add(new UnreadFragment()); fragmentList.add(new ReadFragment()); - SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager(), pageTitles, fragmentList); dashboardViewPager.setAdapter(adapter); //绑定TabLayout topTabLayout.setupWithViewPager(dashboardViewPager); @@ -59,27 +55,4 @@ protected void initEvent() { } - - class SubViewPagerAdapter extends FragmentPagerAdapter { - - SubViewPagerAdapter(FragmentManager fm) { - super(fm); - } - - @NotNull - @Override - public Fragment getItem(int position) { - return fragmentList.get(position); - } - - @Override - public int getCount() { - return fragmentList.size(); - } - - @Override - public CharSequence getPageTitle(int position) { - return pageTitles[position]; - } - } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java new file mode 100644 index 0000000..3da2fe2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:42 + * @email : 290677893@qq.com + **/ +public class ExcelFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_excel; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java new file mode 100644 index 0000000..3afb0b8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java @@ -0,0 +1,139 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.graphics.Color; +import android.text.TextUtils; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.presenter.EventSourcePresenterImpl; +import com.casic.dcms.mvp.view.IEventSourceView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.ToastHelper; +import com.github.mikephil.charting.charts.PieChart; +import com.github.mikephil.charting.components.Legend; +import com.github.mikephil.charting.data.PieData; +import com.github.mikephil.charting.data.PieDataSet; +import com.github.mikephil.charting.data.PieEntry; +import com.github.mikephil.charting.formatter.PercentFormatter; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:43 + * @email : 290677893@qq.com + **/ +public class PieChartFragment extends BaseFragment implements IEventSourceView { + + private static final String TAG = "PieChartFragment"; + @BindView(R.id.pieChartView) + PieChart pieChartView; + + private Context context; + private EventSourcePresenterImpl eventSourcePresenter; + private List entries; + private String begTime; + private String endTime; + + @Override + protected int initLayoutView() { + return R.layout.fragment_chart; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + begTime = (String) SaveKeyValues.getValue("begTime", ""); + endTime = (String) SaveKeyValues.getValue("endTime", ""); + eventSourcePresenter = new EventSourcePresenterImpl(this); + entries = new ArrayList<>(); + } + + @Override + protected void initEvent() { + if (TextUtils.isEmpty(begTime) || TextUtils.isEmpty(endTime)) { + ToastHelper.showToast("起始时间或者结束时间不对", ToastHelper.ERROR); + return; + } + eventSourcePresenter.onReadyRetrofitRequest(begTime, endTime); + } + + @Override + public void obtainEventSourceResult(EventSourceBean resultBean) { + //将统计数据存本地,提供给表/图页面使用 +// Log.d(TAG, "obtainEventSourceResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeanList = resultBean.getData(); + for (EventSourceBean.DataBean dataBean : dataBeanList) { + float eventNum = Float.parseFloat(dataBean.getEventNum()); + if (eventNum != 0) { + entries.add(new PieEntry(eventNum, dataBean.getCaseSource())); + } + } + initPieChart(); + } + } + + private void initPieChart() { + pieChartView.setDragDecelerationFrictionCoef(0.95f); + pieChartView.setDrawCenterText(false); + pieChartView.getDescription().setEnabled(false); + pieChartView.setRotationAngle(0); + // enable rotation of the chart by touch + pieChartView.setRotationEnabled(true); + pieChartView.setHighlightPerTapEnabled(true); + pieChartView.setDrawEntryLabels(true); + pieChartView.setDrawHoleEnabled(false); + setChartData(); + pieChartView.animateY(1000); + + Legend l = pieChartView.getLegend(); + l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); + l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT); + l.setOrientation(Legend.LegendOrientation.VERTICAL); + l.setDrawInside(false); + l.setXEntrySpace(7f); + l.setYEntrySpace(1f); + l.setYOffset(0f); + // entry label styling + pieChartView.setEntryLabelColor(Color.BLUE); + pieChartView.setEntryLabelTextSize(12f); + pieChartView.setExtraOffsets(30, 30, 30, 30); + } + + private void setChartData() { + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f); + dataSet.setSelectionShift(5f); + dataSet.setColors(Constant.PIE_COLORS); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.GREEN); + dataSet.setValueLinePart1Length(0.6f); + PieData data = new PieData(dataSet); + data.setValueFormatter(new PercentFormatter()); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); + pieChartView.setData(data); + pieChartView.highlightValues(null); + pieChartView.invalidate(); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (eventSourcePresenter != null) { + eventSourcePresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java index 00d8669..73f6799 100644 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java @@ -1,6 +1,9 @@ package com.casic.dcms.utils; import android.content.Context; +import android.graphics.Color; + +import java.util.Random; /** * @Author: Pengxh @@ -11,4 +14,15 @@ public static int getResourcesColor(Context context, int res) { return context.getResources().getColor(res); } + + /** + * 随机颜色 + */ + public static int getRandomColor() { + Random random = new Random(); + int red = random.nextInt(256); + int green = random.nextInt(256); + int blue = random.nextInt(256); + return Color.rgb(red, green, blue); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 4ad3a5d..2c95016 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -1,6 +1,7 @@ package com.casic.dcms.utils; import android.Manifest; +import android.graphics.Color; import com.casic.dcms.R; @@ -37,13 +38,18 @@ Manifest.permission.RECORD_AUDIO, Manifest.permission.CALL_PHONE}; - public static final int SELECT_PICTURE_CODE = 9001; - - public static final int PERMISSIONS_CODE = 999; - - public static final String IP_KEY = "BASE_IP"; - - public static final String LOGIN_OUT_ACTION = "loginOut"; + //先预置十种颜色 + public static final int[] PIE_COLORS = {Color.rgb(181, 194, 202), + Color.rgb(129, 216, 200), Color.rgb(241, 214, 145), + Color.rgb(108, 176, 223), Color.rgb(195, 221, 155), + Color.rgb(251, 215, 191), Color.rgb(237, 189, 189), + Color.rgb(172, 217, 243)}; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final int PERMISSIONS_CODE = 999; + public static final int SELECT_PICTURE_CODE = 9001; + + public static final String IP_KEY = "BASE_IP"; + public static final String LOGIN_OUT_ACTION = "loginOut"; + public static final String EVENT_SOURCE = "eventSourceData"; } diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/mvp/model/EventSourceModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java new file mode 100644 index 0000000..cc3d4d7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:53 + * @email : 290677893@qq.com + **/ +public class EventSourceModelImpl implements IEventSourceModel { + + private OnGetEventSourceListener listener; + + public EventSourceModelImpl(OnGetEventSourceListener sourceListener) { + this.listener = sourceListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetEventSourceListener { + void onSuccess(EventSourceBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getEventSourceResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(EventSourceBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java new file mode 100644 index 0000000..d470ab3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java @@ -0,0 +1,57 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public class HighEventModelImpl implements IHighEventModel { + + private OnGetHighEventListener listener; + + public HighEventModelImpl(OnGetHighEventListener highEventListener) { + this.listener = highEventListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetHighEventListener { + void onSuccess(Object resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getHighEventResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(Object resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java new file mode 100644 index 0000000..ad5709a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IEventSourceModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java new file mode 100644 index 0000000..c86a82a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IHighEventModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java new file mode 100644 index 0000000..bc6c382 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.EventSourceModelImpl; +import com.casic.dcms.mvp.view.IEventSourceView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class EventSourcePresenterImpl extends BasePresenter implements IEventSourcePresenter, EventSourceModelImpl.OnGetEventSourceListener { + + private IEventSourceView view; + private EventSourceModelImpl actionModel; + + public EventSourcePresenterImpl(IEventSourceView sourceView) { + this.view = sourceView; + actionModel = new EventSourceModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(EventSourceBean resultBean) { + view.obtainEventSourceResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java new file mode 100644 index 0000000..045abc3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.HighEventModelImpl; +import com.casic.dcms.mvp.view.IHighEventView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class HighEventPresenterImpl extends BasePresenter implements IHighEventPresenter, HighEventModelImpl.OnGetHighEventListener { + + private IHighEventView view; + private HighEventModelImpl actionModel; + + public HighEventPresenterImpl(IHighEventView highEventView) { + this.view = highEventView; + actionModel = new HighEventModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(Object resultBean) { + view.obtainHighEventResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java new file mode 100644 index 0000000..8d45793 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IEventSourcePresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java new file mode 100644 index 0000000..d2d85fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IHighEventPresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java new file mode 100644 index 0000000..b22af01 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.EventSourceBean; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:48 + * @email : 290677893@qq.com + **/ +public interface IEventSourceView { + void obtainEventSourceResult(EventSourceBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java new file mode 100644 index 0000000..505ab6b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java @@ -0,0 +1,10 @@ +package com.casic.dcms.mvp.view; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:06 + * @email : 290677893@qq.com + **/ +public interface IHighEventView { + void obtainHighEventResult(Object resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 1f959b0..a513a5b 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -1,6 +1,7 @@ package com.casic.dcms.ui; import android.content.Context; +import android.content.Intent; import android.view.View; import android.widget.ImageView; import android.widget.TextView; @@ -14,6 +15,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; import com.jzxiang.pickerview.TimePickerDialog; @@ -71,16 +73,18 @@ adapter.setOnGridItemClickListener(new AnalysisRecycleAdapter.OnGridItemClickListener() { @Override public void onClick(int position) { -// Intent intent = new Intent(); + Intent intent = new Intent(); switch (position) { case 0: - ToastHelper.showToast("问题来源", ToastHelper.INFO); + intent.setClass(context, EventSourceActivity.class); + startActivity(intent); break; case 1: ToastHelper.showToast("案卷状态", ToastHelper.INFO); break; case 2: - ToastHelper.showToast("高发问题", ToastHelper.INFO); + intent.setClass(context, HighEventListActivity.class); + startActivity(intent); break; case 3: ToastHelper.showToast("街道统计", ToastHelper.INFO); @@ -113,10 +117,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - startDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + startDateView.setText(date); + SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: @@ -124,10 +131,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - endDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + endDateView.setText(date); + SaveKeyValues.putValue("endTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; default: diff --git a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java new file mode 100644 index 0000000..019a9dc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java @@ -0,0 +1,76 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.viewpager.widget.ViewPager; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.ui.fragment.ExcelFragment; +import com.casic.dcms.ui.fragment.PieChartFragment; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + **/ +public class EventSourceActivity extends BaseActivity { + + private static final String[] pageTitles = {"表格", "饼状图"}; + @BindView(R.id.resourceTopLayout) + QMUITopBarLayout resourceTopLayout; + @BindView(R.id.eventTabLayout) + TabLayout eventTabLayout; + @BindView(R.id.eventViewPager) + ViewPager eventViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_event_resource; + } + + @Override + protected void setupTopBarLayout() { + resourceTopLayout.setTitle("问题来源").setTextColor(ContextCompat.getColor(this, R.color.white)); + resourceTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + resourceTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); + fragmentList.add(new ExcelFragment()); + fragmentList.add(new PieChartFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); + eventViewPager.setAdapter(adapter); + //绑定TabLayout + eventTabLayout.setupWithViewPager(eventViewPager); + LinearLayout linearLayout = (LinearLayout) eventTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java new file mode 100644 index 0000000..e27d0b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java @@ -0,0 +1,77 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.mvp.presenter.HighEventPresenterImpl; +import com.casic.dcms.mvp.view.IHighEventView; +import com.casic.dcms.utils.SaveKeyValues; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 8:44 + * @email : 290677893@qq.com + **/ +public class HighEventListActivity extends BaseActivity implements IHighEventView { + + private static final String TAG = "HighEventListActivity"; + @BindView(R.id.highEventTopLayout) + QMUITopBarLayout highEventTopLayout; + @BindView(R.id.contentView) + TextView contentView; + + private HighEventPresenterImpl highEventPresenter; + private String begTime; + private String endTime; + + @Override + public int initLayoutView() { + return R.layout.activity_high_event; + } + + @Override + protected void setupTopBarLayout() { + highEventTopLayout.setTitle("高发问题").setTextColor(ContextCompat.getColor(this, R.color.white)); + highEventTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + highEventTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + begTime = (String) SaveKeyValues.getValue("begTime", ""); + endTime = (String) SaveKeyValues.getValue("endTime", ""); + highEventPresenter = new HighEventPresenterImpl(this); + } + + @Override + public void initEvent() { + highEventPresenter.onReadyRetrofitRequest(begTime, endTime); + } + + @Override + public void obtainHighEventResult(Object resultBean) { +// Log.d(TAG, "obtainHighEventResult: " + new Gson().toJson(resultBean)); + contentView.setText(new Gson().toJson(resultBean)); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (highEventPresenter != null) { + highEventPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index 9d64c11..62d4aa2 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -5,16 +5,13 @@ import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; import com.casic.dcms.base.BaseFragment; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.tabs.TabLayout; -import org.jetbrains.annotations.NotNull; - import java.util.ArrayList; import java.util.List; @@ -29,7 +26,6 @@ NoScrollViewPager dashboardViewPager; private Context context; - private List fragmentList; @Override protected int initLayoutView() { @@ -43,10 +39,10 @@ @Override protected void initData() { - fragmentList = new ArrayList<>(); + List fragmentList = new ArrayList<>(); fragmentList.add(new UnreadFragment()); fragmentList.add(new ReadFragment()); - SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager(), pageTitles, fragmentList); dashboardViewPager.setAdapter(adapter); //绑定TabLayout topTabLayout.setupWithViewPager(dashboardViewPager); @@ -59,27 +55,4 @@ protected void initEvent() { } - - class SubViewPagerAdapter extends FragmentPagerAdapter { - - SubViewPagerAdapter(FragmentManager fm) { - super(fm); - } - - @NotNull - @Override - public Fragment getItem(int position) { - return fragmentList.get(position); - } - - @Override - public int getCount() { - return fragmentList.size(); - } - - @Override - public CharSequence getPageTitle(int position) { - return pageTitles[position]; - } - } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java new file mode 100644 index 0000000..3da2fe2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:42 + * @email : 290677893@qq.com + **/ +public class ExcelFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_excel; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java new file mode 100644 index 0000000..3afb0b8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java @@ -0,0 +1,139 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.graphics.Color; +import android.text.TextUtils; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.presenter.EventSourcePresenterImpl; +import com.casic.dcms.mvp.view.IEventSourceView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.ToastHelper; +import com.github.mikephil.charting.charts.PieChart; +import com.github.mikephil.charting.components.Legend; +import com.github.mikephil.charting.data.PieData; +import com.github.mikephil.charting.data.PieDataSet; +import com.github.mikephil.charting.data.PieEntry; +import com.github.mikephil.charting.formatter.PercentFormatter; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:43 + * @email : 290677893@qq.com + **/ +public class PieChartFragment extends BaseFragment implements IEventSourceView { + + private static final String TAG = "PieChartFragment"; + @BindView(R.id.pieChartView) + PieChart pieChartView; + + private Context context; + private EventSourcePresenterImpl eventSourcePresenter; + private List entries; + private String begTime; + private String endTime; + + @Override + protected int initLayoutView() { + return R.layout.fragment_chart; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + begTime = (String) SaveKeyValues.getValue("begTime", ""); + endTime = (String) SaveKeyValues.getValue("endTime", ""); + eventSourcePresenter = new EventSourcePresenterImpl(this); + entries = new ArrayList<>(); + } + + @Override + protected void initEvent() { + if (TextUtils.isEmpty(begTime) || TextUtils.isEmpty(endTime)) { + ToastHelper.showToast("起始时间或者结束时间不对", ToastHelper.ERROR); + return; + } + eventSourcePresenter.onReadyRetrofitRequest(begTime, endTime); + } + + @Override + public void obtainEventSourceResult(EventSourceBean resultBean) { + //将统计数据存本地,提供给表/图页面使用 +// Log.d(TAG, "obtainEventSourceResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeanList = resultBean.getData(); + for (EventSourceBean.DataBean dataBean : dataBeanList) { + float eventNum = Float.parseFloat(dataBean.getEventNum()); + if (eventNum != 0) { + entries.add(new PieEntry(eventNum, dataBean.getCaseSource())); + } + } + initPieChart(); + } + } + + private void initPieChart() { + pieChartView.setDragDecelerationFrictionCoef(0.95f); + pieChartView.setDrawCenterText(false); + pieChartView.getDescription().setEnabled(false); + pieChartView.setRotationAngle(0); + // enable rotation of the chart by touch + pieChartView.setRotationEnabled(true); + pieChartView.setHighlightPerTapEnabled(true); + pieChartView.setDrawEntryLabels(true); + pieChartView.setDrawHoleEnabled(false); + setChartData(); + pieChartView.animateY(1000); + + Legend l = pieChartView.getLegend(); + l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); + l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT); + l.setOrientation(Legend.LegendOrientation.VERTICAL); + l.setDrawInside(false); + l.setXEntrySpace(7f); + l.setYEntrySpace(1f); + l.setYOffset(0f); + // entry label styling + pieChartView.setEntryLabelColor(Color.BLUE); + pieChartView.setEntryLabelTextSize(12f); + pieChartView.setExtraOffsets(30, 30, 30, 30); + } + + private void setChartData() { + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f); + dataSet.setSelectionShift(5f); + dataSet.setColors(Constant.PIE_COLORS); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.GREEN); + dataSet.setValueLinePart1Length(0.6f); + PieData data = new PieData(dataSet); + data.setValueFormatter(new PercentFormatter()); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); + pieChartView.setData(data); + pieChartView.highlightValues(null); + pieChartView.invalidate(); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (eventSourcePresenter != null) { + eventSourcePresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java index 00d8669..73f6799 100644 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java @@ -1,6 +1,9 @@ package com.casic.dcms.utils; import android.content.Context; +import android.graphics.Color; + +import java.util.Random; /** * @Author: Pengxh @@ -11,4 +14,15 @@ public static int getResourcesColor(Context context, int res) { return context.getResources().getColor(res); } + + /** + * 随机颜色 + */ + public static int getRandomColor() { + Random random = new Random(); + int red = random.nextInt(256); + int green = random.nextInt(256); + int blue = random.nextInt(256); + return Color.rgb(red, green, blue); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 4ad3a5d..2c95016 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -1,6 +1,7 @@ package com.casic.dcms.utils; import android.Manifest; +import android.graphics.Color; import com.casic.dcms.R; @@ -37,13 +38,18 @@ Manifest.permission.RECORD_AUDIO, Manifest.permission.CALL_PHONE}; - public static final int SELECT_PICTURE_CODE = 9001; - - public static final int PERMISSIONS_CODE = 999; - - public static final String IP_KEY = "BASE_IP"; - - public static final String LOGIN_OUT_ACTION = "loginOut"; + //先预置十种颜色 + public static final int[] PIE_COLORS = {Color.rgb(181, 194, 202), + Color.rgb(129, 216, 200), Color.rgb(241, 214, 145), + Color.rgb(108, 176, 223), Color.rgb(195, 221, 155), + Color.rgb(251, 215, 191), Color.rgb(237, 189, 189), + Color.rgb(172, 217, 243)}; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final int PERMISSIONS_CODE = 999; + public static final int SELECT_PICTURE_CODE = 9001; + + public static final String IP_KEY = "BASE_IP"; + public static final String LOGIN_OUT_ACTION = "loginOut"; + public static final String EVENT_SOURCE = "eventSourceData"; } 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 e11fe9e..6b22eaf 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 @@ -4,6 +4,7 @@ import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.EventSourceBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PhoneBookBean; @@ -97,4 +98,22 @@ @POST("/mgr/mobileList") Observable obtainPhoneBook(@Header("token") String token, @Field("deptid") String deptid); + + /** + * 获取高发问题 + */ + @FormUrlEncoded + @POST("/departmentAssess/highEventList") + Observable obtainHighEvent(@Header("token") String token, + @Field("begTime") String begTime, + @Field("deptid") String endTime); + + /** + * 获取高发问题 + */ + @FormUrlEncoded + @POST("/departmentAssess/sourceList") + Observable obtainEventSource(@Header("token") String token, + @Field("begTime") String begTime, + @Field("deptid") String endTime); } diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/mvp/model/EventSourceModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java new file mode 100644 index 0000000..cc3d4d7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:53 + * @email : 290677893@qq.com + **/ +public class EventSourceModelImpl implements IEventSourceModel { + + private OnGetEventSourceListener listener; + + public EventSourceModelImpl(OnGetEventSourceListener sourceListener) { + this.listener = sourceListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetEventSourceListener { + void onSuccess(EventSourceBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getEventSourceResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(EventSourceBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java new file mode 100644 index 0000000..d470ab3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java @@ -0,0 +1,57 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public class HighEventModelImpl implements IHighEventModel { + + private OnGetHighEventListener listener; + + public HighEventModelImpl(OnGetHighEventListener highEventListener) { + this.listener = highEventListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetHighEventListener { + void onSuccess(Object resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getHighEventResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(Object resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java new file mode 100644 index 0000000..ad5709a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IEventSourceModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java new file mode 100644 index 0000000..c86a82a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IHighEventModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java new file mode 100644 index 0000000..bc6c382 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.EventSourceModelImpl; +import com.casic.dcms.mvp.view.IEventSourceView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class EventSourcePresenterImpl extends BasePresenter implements IEventSourcePresenter, EventSourceModelImpl.OnGetEventSourceListener { + + private IEventSourceView view; + private EventSourceModelImpl actionModel; + + public EventSourcePresenterImpl(IEventSourceView sourceView) { + this.view = sourceView; + actionModel = new EventSourceModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(EventSourceBean resultBean) { + view.obtainEventSourceResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java new file mode 100644 index 0000000..045abc3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.HighEventModelImpl; +import com.casic.dcms.mvp.view.IHighEventView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class HighEventPresenterImpl extends BasePresenter implements IHighEventPresenter, HighEventModelImpl.OnGetHighEventListener { + + private IHighEventView view; + private HighEventModelImpl actionModel; + + public HighEventPresenterImpl(IHighEventView highEventView) { + this.view = highEventView; + actionModel = new HighEventModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(Object resultBean) { + view.obtainHighEventResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java new file mode 100644 index 0000000..8d45793 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IEventSourcePresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java new file mode 100644 index 0000000..d2d85fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IHighEventPresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java new file mode 100644 index 0000000..b22af01 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.EventSourceBean; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:48 + * @email : 290677893@qq.com + **/ +public interface IEventSourceView { + void obtainEventSourceResult(EventSourceBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java new file mode 100644 index 0000000..505ab6b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java @@ -0,0 +1,10 @@ +package com.casic.dcms.mvp.view; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:06 + * @email : 290677893@qq.com + **/ +public interface IHighEventView { + void obtainHighEventResult(Object resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 1f959b0..a513a5b 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -1,6 +1,7 @@ package com.casic.dcms.ui; import android.content.Context; +import android.content.Intent; import android.view.View; import android.widget.ImageView; import android.widget.TextView; @@ -14,6 +15,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; import com.jzxiang.pickerview.TimePickerDialog; @@ -71,16 +73,18 @@ adapter.setOnGridItemClickListener(new AnalysisRecycleAdapter.OnGridItemClickListener() { @Override public void onClick(int position) { -// Intent intent = new Intent(); + Intent intent = new Intent(); switch (position) { case 0: - ToastHelper.showToast("问题来源", ToastHelper.INFO); + intent.setClass(context, EventSourceActivity.class); + startActivity(intent); break; case 1: ToastHelper.showToast("案卷状态", ToastHelper.INFO); break; case 2: - ToastHelper.showToast("高发问题", ToastHelper.INFO); + intent.setClass(context, HighEventListActivity.class); + startActivity(intent); break; case 3: ToastHelper.showToast("街道统计", ToastHelper.INFO); @@ -113,10 +117,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - startDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + startDateView.setText(date); + SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: @@ -124,10 +131,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - endDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + endDateView.setText(date); + SaveKeyValues.putValue("endTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; default: diff --git a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java new file mode 100644 index 0000000..019a9dc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java @@ -0,0 +1,76 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.viewpager.widget.ViewPager; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.ui.fragment.ExcelFragment; +import com.casic.dcms.ui.fragment.PieChartFragment; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + **/ +public class EventSourceActivity extends BaseActivity { + + private static final String[] pageTitles = {"表格", "饼状图"}; + @BindView(R.id.resourceTopLayout) + QMUITopBarLayout resourceTopLayout; + @BindView(R.id.eventTabLayout) + TabLayout eventTabLayout; + @BindView(R.id.eventViewPager) + ViewPager eventViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_event_resource; + } + + @Override + protected void setupTopBarLayout() { + resourceTopLayout.setTitle("问题来源").setTextColor(ContextCompat.getColor(this, R.color.white)); + resourceTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + resourceTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); + fragmentList.add(new ExcelFragment()); + fragmentList.add(new PieChartFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); + eventViewPager.setAdapter(adapter); + //绑定TabLayout + eventTabLayout.setupWithViewPager(eventViewPager); + LinearLayout linearLayout = (LinearLayout) eventTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java new file mode 100644 index 0000000..e27d0b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java @@ -0,0 +1,77 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.mvp.presenter.HighEventPresenterImpl; +import com.casic.dcms.mvp.view.IHighEventView; +import com.casic.dcms.utils.SaveKeyValues; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 8:44 + * @email : 290677893@qq.com + **/ +public class HighEventListActivity extends BaseActivity implements IHighEventView { + + private static final String TAG = "HighEventListActivity"; + @BindView(R.id.highEventTopLayout) + QMUITopBarLayout highEventTopLayout; + @BindView(R.id.contentView) + TextView contentView; + + private HighEventPresenterImpl highEventPresenter; + private String begTime; + private String endTime; + + @Override + public int initLayoutView() { + return R.layout.activity_high_event; + } + + @Override + protected void setupTopBarLayout() { + highEventTopLayout.setTitle("高发问题").setTextColor(ContextCompat.getColor(this, R.color.white)); + highEventTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + highEventTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + begTime = (String) SaveKeyValues.getValue("begTime", ""); + endTime = (String) SaveKeyValues.getValue("endTime", ""); + highEventPresenter = new HighEventPresenterImpl(this); + } + + @Override + public void initEvent() { + highEventPresenter.onReadyRetrofitRequest(begTime, endTime); + } + + @Override + public void obtainHighEventResult(Object resultBean) { +// Log.d(TAG, "obtainHighEventResult: " + new Gson().toJson(resultBean)); + contentView.setText(new Gson().toJson(resultBean)); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (highEventPresenter != null) { + highEventPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index 9d64c11..62d4aa2 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -5,16 +5,13 @@ import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; import com.casic.dcms.base.BaseFragment; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.tabs.TabLayout; -import org.jetbrains.annotations.NotNull; - import java.util.ArrayList; import java.util.List; @@ -29,7 +26,6 @@ NoScrollViewPager dashboardViewPager; private Context context; - private List fragmentList; @Override protected int initLayoutView() { @@ -43,10 +39,10 @@ @Override protected void initData() { - fragmentList = new ArrayList<>(); + List fragmentList = new ArrayList<>(); fragmentList.add(new UnreadFragment()); fragmentList.add(new ReadFragment()); - SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager(), pageTitles, fragmentList); dashboardViewPager.setAdapter(adapter); //绑定TabLayout topTabLayout.setupWithViewPager(dashboardViewPager); @@ -59,27 +55,4 @@ protected void initEvent() { } - - class SubViewPagerAdapter extends FragmentPagerAdapter { - - SubViewPagerAdapter(FragmentManager fm) { - super(fm); - } - - @NotNull - @Override - public Fragment getItem(int position) { - return fragmentList.get(position); - } - - @Override - public int getCount() { - return fragmentList.size(); - } - - @Override - public CharSequence getPageTitle(int position) { - return pageTitles[position]; - } - } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java new file mode 100644 index 0000000..3da2fe2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:42 + * @email : 290677893@qq.com + **/ +public class ExcelFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_excel; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java new file mode 100644 index 0000000..3afb0b8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java @@ -0,0 +1,139 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.graphics.Color; +import android.text.TextUtils; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.presenter.EventSourcePresenterImpl; +import com.casic.dcms.mvp.view.IEventSourceView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.ToastHelper; +import com.github.mikephil.charting.charts.PieChart; +import com.github.mikephil.charting.components.Legend; +import com.github.mikephil.charting.data.PieData; +import com.github.mikephil.charting.data.PieDataSet; +import com.github.mikephil.charting.data.PieEntry; +import com.github.mikephil.charting.formatter.PercentFormatter; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:43 + * @email : 290677893@qq.com + **/ +public class PieChartFragment extends BaseFragment implements IEventSourceView { + + private static final String TAG = "PieChartFragment"; + @BindView(R.id.pieChartView) + PieChart pieChartView; + + private Context context; + private EventSourcePresenterImpl eventSourcePresenter; + private List entries; + private String begTime; + private String endTime; + + @Override + protected int initLayoutView() { + return R.layout.fragment_chart; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + begTime = (String) SaveKeyValues.getValue("begTime", ""); + endTime = (String) SaveKeyValues.getValue("endTime", ""); + eventSourcePresenter = new EventSourcePresenterImpl(this); + entries = new ArrayList<>(); + } + + @Override + protected void initEvent() { + if (TextUtils.isEmpty(begTime) || TextUtils.isEmpty(endTime)) { + ToastHelper.showToast("起始时间或者结束时间不对", ToastHelper.ERROR); + return; + } + eventSourcePresenter.onReadyRetrofitRequest(begTime, endTime); + } + + @Override + public void obtainEventSourceResult(EventSourceBean resultBean) { + //将统计数据存本地,提供给表/图页面使用 +// Log.d(TAG, "obtainEventSourceResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeanList = resultBean.getData(); + for (EventSourceBean.DataBean dataBean : dataBeanList) { + float eventNum = Float.parseFloat(dataBean.getEventNum()); + if (eventNum != 0) { + entries.add(new PieEntry(eventNum, dataBean.getCaseSource())); + } + } + initPieChart(); + } + } + + private void initPieChart() { + pieChartView.setDragDecelerationFrictionCoef(0.95f); + pieChartView.setDrawCenterText(false); + pieChartView.getDescription().setEnabled(false); + pieChartView.setRotationAngle(0); + // enable rotation of the chart by touch + pieChartView.setRotationEnabled(true); + pieChartView.setHighlightPerTapEnabled(true); + pieChartView.setDrawEntryLabels(true); + pieChartView.setDrawHoleEnabled(false); + setChartData(); + pieChartView.animateY(1000); + + Legend l = pieChartView.getLegend(); + l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); + l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT); + l.setOrientation(Legend.LegendOrientation.VERTICAL); + l.setDrawInside(false); + l.setXEntrySpace(7f); + l.setYEntrySpace(1f); + l.setYOffset(0f); + // entry label styling + pieChartView.setEntryLabelColor(Color.BLUE); + pieChartView.setEntryLabelTextSize(12f); + pieChartView.setExtraOffsets(30, 30, 30, 30); + } + + private void setChartData() { + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f); + dataSet.setSelectionShift(5f); + dataSet.setColors(Constant.PIE_COLORS); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.GREEN); + dataSet.setValueLinePart1Length(0.6f); + PieData data = new PieData(dataSet); + data.setValueFormatter(new PercentFormatter()); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); + pieChartView.setData(data); + pieChartView.highlightValues(null); + pieChartView.invalidate(); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (eventSourcePresenter != null) { + eventSourcePresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java index 00d8669..73f6799 100644 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java @@ -1,6 +1,9 @@ package com.casic.dcms.utils; import android.content.Context; +import android.graphics.Color; + +import java.util.Random; /** * @Author: Pengxh @@ -11,4 +14,15 @@ public static int getResourcesColor(Context context, int res) { return context.getResources().getColor(res); } + + /** + * 随机颜色 + */ + public static int getRandomColor() { + Random random = new Random(); + int red = random.nextInt(256); + int green = random.nextInt(256); + int blue = random.nextInt(256); + return Color.rgb(red, green, blue); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 4ad3a5d..2c95016 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -1,6 +1,7 @@ package com.casic.dcms.utils; import android.Manifest; +import android.graphics.Color; import com.casic.dcms.R; @@ -37,13 +38,18 @@ Manifest.permission.RECORD_AUDIO, Manifest.permission.CALL_PHONE}; - public static final int SELECT_PICTURE_CODE = 9001; - - public static final int PERMISSIONS_CODE = 999; - - public static final String IP_KEY = "BASE_IP"; - - public static final String LOGIN_OUT_ACTION = "loginOut"; + //先预置十种颜色 + public static final int[] PIE_COLORS = {Color.rgb(181, 194, 202), + Color.rgb(129, 216, 200), Color.rgb(241, 214, 145), + Color.rgb(108, 176, 223), Color.rgb(195, 221, 155), + Color.rgb(251, 215, 191), Color.rgb(237, 189, 189), + Color.rgb(172, 217, 243)}; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final int PERMISSIONS_CODE = 999; + public static final int SELECT_PICTURE_CODE = 9001; + + public static final String IP_KEY = "BASE_IP"; + public static final String LOGIN_OUT_ACTION = "loginOut"; + public static final String EVENT_SOURCE = "eventSourceData"; } 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 e11fe9e..6b22eaf 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 @@ -4,6 +4,7 @@ import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.EventSourceBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PhoneBookBean; @@ -97,4 +98,22 @@ @POST("/mgr/mobileList") Observable obtainPhoneBook(@Header("token") String token, @Field("deptid") String deptid); + + /** + * 获取高发问题 + */ + @FormUrlEncoded + @POST("/departmentAssess/highEventList") + Observable obtainHighEvent(@Header("token") String token, + @Field("begTime") String begTime, + @Field("deptid") String endTime); + + /** + * 获取高发问题 + */ + @FormUrlEncoded + @POST("/departmentAssess/sourceList") + Observable obtainEventSource(@Header("token") String token, + @Field("begTime") String begTime, + @Field("deptid") 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 3e256bd..e20f305 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 @@ -6,6 +6,7 @@ import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.EventSourceBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PhoneBookBean; @@ -147,4 +148,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.obtainPhoneBook(TokenHelper.getToken(), deptid); } + + /** + * 获取高发问题 + */ + public static Observable getHighEventResult(String begTime, String endTime) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainHighEvent(TokenHelper.getToken(), begTime, endTime); + } + + /** + * 获取高发问题 + */ + public static Observable getEventSourceResult(String begTime, String endTime) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainEventSource(TokenHelper.getToken(), begTime, endTime); + } } diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/mvp/model/EventSourceModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java new file mode 100644 index 0000000..cc3d4d7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:53 + * @email : 290677893@qq.com + **/ +public class EventSourceModelImpl implements IEventSourceModel { + + private OnGetEventSourceListener listener; + + public EventSourceModelImpl(OnGetEventSourceListener sourceListener) { + this.listener = sourceListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetEventSourceListener { + void onSuccess(EventSourceBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getEventSourceResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(EventSourceBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java new file mode 100644 index 0000000..d470ab3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java @@ -0,0 +1,57 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public class HighEventModelImpl implements IHighEventModel { + + private OnGetHighEventListener listener; + + public HighEventModelImpl(OnGetHighEventListener highEventListener) { + this.listener = highEventListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetHighEventListener { + void onSuccess(Object resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getHighEventResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(Object resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java new file mode 100644 index 0000000..ad5709a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IEventSourceModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java new file mode 100644 index 0000000..c86a82a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IHighEventModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java new file mode 100644 index 0000000..bc6c382 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.EventSourceModelImpl; +import com.casic.dcms.mvp.view.IEventSourceView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class EventSourcePresenterImpl extends BasePresenter implements IEventSourcePresenter, EventSourceModelImpl.OnGetEventSourceListener { + + private IEventSourceView view; + private EventSourceModelImpl actionModel; + + public EventSourcePresenterImpl(IEventSourceView sourceView) { + this.view = sourceView; + actionModel = new EventSourceModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(EventSourceBean resultBean) { + view.obtainEventSourceResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java new file mode 100644 index 0000000..045abc3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.HighEventModelImpl; +import com.casic.dcms.mvp.view.IHighEventView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class HighEventPresenterImpl extends BasePresenter implements IHighEventPresenter, HighEventModelImpl.OnGetHighEventListener { + + private IHighEventView view; + private HighEventModelImpl actionModel; + + public HighEventPresenterImpl(IHighEventView highEventView) { + this.view = highEventView; + actionModel = new HighEventModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(Object resultBean) { + view.obtainHighEventResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java new file mode 100644 index 0000000..8d45793 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IEventSourcePresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java new file mode 100644 index 0000000..d2d85fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IHighEventPresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java new file mode 100644 index 0000000..b22af01 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.EventSourceBean; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:48 + * @email : 290677893@qq.com + **/ +public interface IEventSourceView { + void obtainEventSourceResult(EventSourceBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java new file mode 100644 index 0000000..505ab6b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java @@ -0,0 +1,10 @@ +package com.casic.dcms.mvp.view; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:06 + * @email : 290677893@qq.com + **/ +public interface IHighEventView { + void obtainHighEventResult(Object resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 1f959b0..a513a5b 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -1,6 +1,7 @@ package com.casic.dcms.ui; import android.content.Context; +import android.content.Intent; import android.view.View; import android.widget.ImageView; import android.widget.TextView; @@ -14,6 +15,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; import com.jzxiang.pickerview.TimePickerDialog; @@ -71,16 +73,18 @@ adapter.setOnGridItemClickListener(new AnalysisRecycleAdapter.OnGridItemClickListener() { @Override public void onClick(int position) { -// Intent intent = new Intent(); + Intent intent = new Intent(); switch (position) { case 0: - ToastHelper.showToast("问题来源", ToastHelper.INFO); + intent.setClass(context, EventSourceActivity.class); + startActivity(intent); break; case 1: ToastHelper.showToast("案卷状态", ToastHelper.INFO); break; case 2: - ToastHelper.showToast("高发问题", ToastHelper.INFO); + intent.setClass(context, HighEventListActivity.class); + startActivity(intent); break; case 3: ToastHelper.showToast("街道统计", ToastHelper.INFO); @@ -113,10 +117,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - startDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + startDateView.setText(date); + SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: @@ -124,10 +131,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - endDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + endDateView.setText(date); + SaveKeyValues.putValue("endTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; default: diff --git a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java new file mode 100644 index 0000000..019a9dc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java @@ -0,0 +1,76 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.viewpager.widget.ViewPager; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.ui.fragment.ExcelFragment; +import com.casic.dcms.ui.fragment.PieChartFragment; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + **/ +public class EventSourceActivity extends BaseActivity { + + private static final String[] pageTitles = {"表格", "饼状图"}; + @BindView(R.id.resourceTopLayout) + QMUITopBarLayout resourceTopLayout; + @BindView(R.id.eventTabLayout) + TabLayout eventTabLayout; + @BindView(R.id.eventViewPager) + ViewPager eventViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_event_resource; + } + + @Override + protected void setupTopBarLayout() { + resourceTopLayout.setTitle("问题来源").setTextColor(ContextCompat.getColor(this, R.color.white)); + resourceTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + resourceTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); + fragmentList.add(new ExcelFragment()); + fragmentList.add(new PieChartFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); + eventViewPager.setAdapter(adapter); + //绑定TabLayout + eventTabLayout.setupWithViewPager(eventViewPager); + LinearLayout linearLayout = (LinearLayout) eventTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java new file mode 100644 index 0000000..e27d0b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java @@ -0,0 +1,77 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.mvp.presenter.HighEventPresenterImpl; +import com.casic.dcms.mvp.view.IHighEventView; +import com.casic.dcms.utils.SaveKeyValues; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 8:44 + * @email : 290677893@qq.com + **/ +public class HighEventListActivity extends BaseActivity implements IHighEventView { + + private static final String TAG = "HighEventListActivity"; + @BindView(R.id.highEventTopLayout) + QMUITopBarLayout highEventTopLayout; + @BindView(R.id.contentView) + TextView contentView; + + private HighEventPresenterImpl highEventPresenter; + private String begTime; + private String endTime; + + @Override + public int initLayoutView() { + return R.layout.activity_high_event; + } + + @Override + protected void setupTopBarLayout() { + highEventTopLayout.setTitle("高发问题").setTextColor(ContextCompat.getColor(this, R.color.white)); + highEventTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + highEventTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + begTime = (String) SaveKeyValues.getValue("begTime", ""); + endTime = (String) SaveKeyValues.getValue("endTime", ""); + highEventPresenter = new HighEventPresenterImpl(this); + } + + @Override + public void initEvent() { + highEventPresenter.onReadyRetrofitRequest(begTime, endTime); + } + + @Override + public void obtainHighEventResult(Object resultBean) { +// Log.d(TAG, "obtainHighEventResult: " + new Gson().toJson(resultBean)); + contentView.setText(new Gson().toJson(resultBean)); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (highEventPresenter != null) { + highEventPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index 9d64c11..62d4aa2 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -5,16 +5,13 @@ import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; import com.casic.dcms.base.BaseFragment; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.tabs.TabLayout; -import org.jetbrains.annotations.NotNull; - import java.util.ArrayList; import java.util.List; @@ -29,7 +26,6 @@ NoScrollViewPager dashboardViewPager; private Context context; - private List fragmentList; @Override protected int initLayoutView() { @@ -43,10 +39,10 @@ @Override protected void initData() { - fragmentList = new ArrayList<>(); + List fragmentList = new ArrayList<>(); fragmentList.add(new UnreadFragment()); fragmentList.add(new ReadFragment()); - SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager(), pageTitles, fragmentList); dashboardViewPager.setAdapter(adapter); //绑定TabLayout topTabLayout.setupWithViewPager(dashboardViewPager); @@ -59,27 +55,4 @@ protected void initEvent() { } - - class SubViewPagerAdapter extends FragmentPagerAdapter { - - SubViewPagerAdapter(FragmentManager fm) { - super(fm); - } - - @NotNull - @Override - public Fragment getItem(int position) { - return fragmentList.get(position); - } - - @Override - public int getCount() { - return fragmentList.size(); - } - - @Override - public CharSequence getPageTitle(int position) { - return pageTitles[position]; - } - } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java new file mode 100644 index 0000000..3da2fe2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:42 + * @email : 290677893@qq.com + **/ +public class ExcelFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_excel; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java new file mode 100644 index 0000000..3afb0b8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java @@ -0,0 +1,139 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.graphics.Color; +import android.text.TextUtils; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.presenter.EventSourcePresenterImpl; +import com.casic.dcms.mvp.view.IEventSourceView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.ToastHelper; +import com.github.mikephil.charting.charts.PieChart; +import com.github.mikephil.charting.components.Legend; +import com.github.mikephil.charting.data.PieData; +import com.github.mikephil.charting.data.PieDataSet; +import com.github.mikephil.charting.data.PieEntry; +import com.github.mikephil.charting.formatter.PercentFormatter; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:43 + * @email : 290677893@qq.com + **/ +public class PieChartFragment extends BaseFragment implements IEventSourceView { + + private static final String TAG = "PieChartFragment"; + @BindView(R.id.pieChartView) + PieChart pieChartView; + + private Context context; + private EventSourcePresenterImpl eventSourcePresenter; + private List entries; + private String begTime; + private String endTime; + + @Override + protected int initLayoutView() { + return R.layout.fragment_chart; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + begTime = (String) SaveKeyValues.getValue("begTime", ""); + endTime = (String) SaveKeyValues.getValue("endTime", ""); + eventSourcePresenter = new EventSourcePresenterImpl(this); + entries = new ArrayList<>(); + } + + @Override + protected void initEvent() { + if (TextUtils.isEmpty(begTime) || TextUtils.isEmpty(endTime)) { + ToastHelper.showToast("起始时间或者结束时间不对", ToastHelper.ERROR); + return; + } + eventSourcePresenter.onReadyRetrofitRequest(begTime, endTime); + } + + @Override + public void obtainEventSourceResult(EventSourceBean resultBean) { + //将统计数据存本地,提供给表/图页面使用 +// Log.d(TAG, "obtainEventSourceResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeanList = resultBean.getData(); + for (EventSourceBean.DataBean dataBean : dataBeanList) { + float eventNum = Float.parseFloat(dataBean.getEventNum()); + if (eventNum != 0) { + entries.add(new PieEntry(eventNum, dataBean.getCaseSource())); + } + } + initPieChart(); + } + } + + private void initPieChart() { + pieChartView.setDragDecelerationFrictionCoef(0.95f); + pieChartView.setDrawCenterText(false); + pieChartView.getDescription().setEnabled(false); + pieChartView.setRotationAngle(0); + // enable rotation of the chart by touch + pieChartView.setRotationEnabled(true); + pieChartView.setHighlightPerTapEnabled(true); + pieChartView.setDrawEntryLabels(true); + pieChartView.setDrawHoleEnabled(false); + setChartData(); + pieChartView.animateY(1000); + + Legend l = pieChartView.getLegend(); + l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); + l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT); + l.setOrientation(Legend.LegendOrientation.VERTICAL); + l.setDrawInside(false); + l.setXEntrySpace(7f); + l.setYEntrySpace(1f); + l.setYOffset(0f); + // entry label styling + pieChartView.setEntryLabelColor(Color.BLUE); + pieChartView.setEntryLabelTextSize(12f); + pieChartView.setExtraOffsets(30, 30, 30, 30); + } + + private void setChartData() { + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f); + dataSet.setSelectionShift(5f); + dataSet.setColors(Constant.PIE_COLORS); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.GREEN); + dataSet.setValueLinePart1Length(0.6f); + PieData data = new PieData(dataSet); + data.setValueFormatter(new PercentFormatter()); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); + pieChartView.setData(data); + pieChartView.highlightValues(null); + pieChartView.invalidate(); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (eventSourcePresenter != null) { + eventSourcePresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java index 00d8669..73f6799 100644 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java @@ -1,6 +1,9 @@ package com.casic.dcms.utils; import android.content.Context; +import android.graphics.Color; + +import java.util.Random; /** * @Author: Pengxh @@ -11,4 +14,15 @@ public static int getResourcesColor(Context context, int res) { return context.getResources().getColor(res); } + + /** + * 随机颜色 + */ + public static int getRandomColor() { + Random random = new Random(); + int red = random.nextInt(256); + int green = random.nextInt(256); + int blue = random.nextInt(256); + return Color.rgb(red, green, blue); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 4ad3a5d..2c95016 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -1,6 +1,7 @@ package com.casic.dcms.utils; import android.Manifest; +import android.graphics.Color; import com.casic.dcms.R; @@ -37,13 +38,18 @@ Manifest.permission.RECORD_AUDIO, Manifest.permission.CALL_PHONE}; - public static final int SELECT_PICTURE_CODE = 9001; - - public static final int PERMISSIONS_CODE = 999; - - public static final String IP_KEY = "BASE_IP"; - - public static final String LOGIN_OUT_ACTION = "loginOut"; + //先预置十种颜色 + public static final int[] PIE_COLORS = {Color.rgb(181, 194, 202), + Color.rgb(129, 216, 200), Color.rgb(241, 214, 145), + Color.rgb(108, 176, 223), Color.rgb(195, 221, 155), + Color.rgb(251, 215, 191), Color.rgb(237, 189, 189), + Color.rgb(172, 217, 243)}; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final int PERMISSIONS_CODE = 999; + public static final int SELECT_PICTURE_CODE = 9001; + + public static final String IP_KEY = "BASE_IP"; + public static final String LOGIN_OUT_ACTION = "loginOut"; + public static final String EVENT_SOURCE = "eventSourceData"; } 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 e11fe9e..6b22eaf 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 @@ -4,6 +4,7 @@ import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.EventSourceBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PhoneBookBean; @@ -97,4 +98,22 @@ @POST("/mgr/mobileList") Observable obtainPhoneBook(@Header("token") String token, @Field("deptid") String deptid); + + /** + * 获取高发问题 + */ + @FormUrlEncoded + @POST("/departmentAssess/highEventList") + Observable obtainHighEvent(@Header("token") String token, + @Field("begTime") String begTime, + @Field("deptid") String endTime); + + /** + * 获取高发问题 + */ + @FormUrlEncoded + @POST("/departmentAssess/sourceList") + Observable obtainEventSource(@Header("token") String token, + @Field("begTime") String begTime, + @Field("deptid") 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 3e256bd..e20f305 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 @@ -6,6 +6,7 @@ import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.EventSourceBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PhoneBookBean; @@ -147,4 +148,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.obtainPhoneBook(TokenHelper.getToken(), deptid); } + + /** + * 获取高发问题 + */ + public static Observable getHighEventResult(String begTime, String endTime) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainHighEvent(TokenHelper.getToken(), begTime, endTime); + } + + /** + * 获取高发问题 + */ + public static Observable getEventSourceResult(String begTime, String endTime) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainEventSource(TokenHelper.getToken(), begTime, endTime); + } } diff --git a/app/src/main/res/layout/activity_analysis.xml b/app/src/main/res/layout/activity_analysis.xml index e5dab95..aa1aa39 100644 --- a/app/src/main/res/layout/activity_analysis.xml +++ b/app/src/main/res/layout/activity_analysis.xml @@ -35,6 +35,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" + android:hint="请选择" android:textSize="@dimen/titleFontSize" /> + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/mvp/model/EventSourceModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java new file mode 100644 index 0000000..cc3d4d7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:53 + * @email : 290677893@qq.com + **/ +public class EventSourceModelImpl implements IEventSourceModel { + + private OnGetEventSourceListener listener; + + public EventSourceModelImpl(OnGetEventSourceListener sourceListener) { + this.listener = sourceListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetEventSourceListener { + void onSuccess(EventSourceBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getEventSourceResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(EventSourceBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java new file mode 100644 index 0000000..d470ab3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java @@ -0,0 +1,57 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public class HighEventModelImpl implements IHighEventModel { + + private OnGetHighEventListener listener; + + public HighEventModelImpl(OnGetHighEventListener highEventListener) { + this.listener = highEventListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetHighEventListener { + void onSuccess(Object resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getHighEventResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(Object resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java new file mode 100644 index 0000000..ad5709a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IEventSourceModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java new file mode 100644 index 0000000..c86a82a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IHighEventModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java new file mode 100644 index 0000000..bc6c382 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.EventSourceModelImpl; +import com.casic.dcms.mvp.view.IEventSourceView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class EventSourcePresenterImpl extends BasePresenter implements IEventSourcePresenter, EventSourceModelImpl.OnGetEventSourceListener { + + private IEventSourceView view; + private EventSourceModelImpl actionModel; + + public EventSourcePresenterImpl(IEventSourceView sourceView) { + this.view = sourceView; + actionModel = new EventSourceModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(EventSourceBean resultBean) { + view.obtainEventSourceResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java new file mode 100644 index 0000000..045abc3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.HighEventModelImpl; +import com.casic.dcms.mvp.view.IHighEventView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class HighEventPresenterImpl extends BasePresenter implements IHighEventPresenter, HighEventModelImpl.OnGetHighEventListener { + + private IHighEventView view; + private HighEventModelImpl actionModel; + + public HighEventPresenterImpl(IHighEventView highEventView) { + this.view = highEventView; + actionModel = new HighEventModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(Object resultBean) { + view.obtainHighEventResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java new file mode 100644 index 0000000..8d45793 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IEventSourcePresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java new file mode 100644 index 0000000..d2d85fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IHighEventPresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java new file mode 100644 index 0000000..b22af01 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.EventSourceBean; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:48 + * @email : 290677893@qq.com + **/ +public interface IEventSourceView { + void obtainEventSourceResult(EventSourceBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java new file mode 100644 index 0000000..505ab6b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java @@ -0,0 +1,10 @@ +package com.casic.dcms.mvp.view; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:06 + * @email : 290677893@qq.com + **/ +public interface IHighEventView { + void obtainHighEventResult(Object resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 1f959b0..a513a5b 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -1,6 +1,7 @@ package com.casic.dcms.ui; import android.content.Context; +import android.content.Intent; import android.view.View; import android.widget.ImageView; import android.widget.TextView; @@ -14,6 +15,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; import com.jzxiang.pickerview.TimePickerDialog; @@ -71,16 +73,18 @@ adapter.setOnGridItemClickListener(new AnalysisRecycleAdapter.OnGridItemClickListener() { @Override public void onClick(int position) { -// Intent intent = new Intent(); + Intent intent = new Intent(); switch (position) { case 0: - ToastHelper.showToast("问题来源", ToastHelper.INFO); + intent.setClass(context, EventSourceActivity.class); + startActivity(intent); break; case 1: ToastHelper.showToast("案卷状态", ToastHelper.INFO); break; case 2: - ToastHelper.showToast("高发问题", ToastHelper.INFO); + intent.setClass(context, HighEventListActivity.class); + startActivity(intent); break; case 3: ToastHelper.showToast("街道统计", ToastHelper.INFO); @@ -113,10 +117,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - startDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + startDateView.setText(date); + SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: @@ -124,10 +131,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - endDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + endDateView.setText(date); + SaveKeyValues.putValue("endTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; default: diff --git a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java new file mode 100644 index 0000000..019a9dc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java @@ -0,0 +1,76 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.viewpager.widget.ViewPager; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.ui.fragment.ExcelFragment; +import com.casic.dcms.ui.fragment.PieChartFragment; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + **/ +public class EventSourceActivity extends BaseActivity { + + private static final String[] pageTitles = {"表格", "饼状图"}; + @BindView(R.id.resourceTopLayout) + QMUITopBarLayout resourceTopLayout; + @BindView(R.id.eventTabLayout) + TabLayout eventTabLayout; + @BindView(R.id.eventViewPager) + ViewPager eventViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_event_resource; + } + + @Override + protected void setupTopBarLayout() { + resourceTopLayout.setTitle("问题来源").setTextColor(ContextCompat.getColor(this, R.color.white)); + resourceTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + resourceTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); + fragmentList.add(new ExcelFragment()); + fragmentList.add(new PieChartFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); + eventViewPager.setAdapter(adapter); + //绑定TabLayout + eventTabLayout.setupWithViewPager(eventViewPager); + LinearLayout linearLayout = (LinearLayout) eventTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java new file mode 100644 index 0000000..e27d0b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java @@ -0,0 +1,77 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.mvp.presenter.HighEventPresenterImpl; +import com.casic.dcms.mvp.view.IHighEventView; +import com.casic.dcms.utils.SaveKeyValues; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 8:44 + * @email : 290677893@qq.com + **/ +public class HighEventListActivity extends BaseActivity implements IHighEventView { + + private static final String TAG = "HighEventListActivity"; + @BindView(R.id.highEventTopLayout) + QMUITopBarLayout highEventTopLayout; + @BindView(R.id.contentView) + TextView contentView; + + private HighEventPresenterImpl highEventPresenter; + private String begTime; + private String endTime; + + @Override + public int initLayoutView() { + return R.layout.activity_high_event; + } + + @Override + protected void setupTopBarLayout() { + highEventTopLayout.setTitle("高发问题").setTextColor(ContextCompat.getColor(this, R.color.white)); + highEventTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + highEventTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + begTime = (String) SaveKeyValues.getValue("begTime", ""); + endTime = (String) SaveKeyValues.getValue("endTime", ""); + highEventPresenter = new HighEventPresenterImpl(this); + } + + @Override + public void initEvent() { + highEventPresenter.onReadyRetrofitRequest(begTime, endTime); + } + + @Override + public void obtainHighEventResult(Object resultBean) { +// Log.d(TAG, "obtainHighEventResult: " + new Gson().toJson(resultBean)); + contentView.setText(new Gson().toJson(resultBean)); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (highEventPresenter != null) { + highEventPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index 9d64c11..62d4aa2 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -5,16 +5,13 @@ import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; import com.casic.dcms.base.BaseFragment; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.tabs.TabLayout; -import org.jetbrains.annotations.NotNull; - import java.util.ArrayList; import java.util.List; @@ -29,7 +26,6 @@ NoScrollViewPager dashboardViewPager; private Context context; - private List fragmentList; @Override protected int initLayoutView() { @@ -43,10 +39,10 @@ @Override protected void initData() { - fragmentList = new ArrayList<>(); + List fragmentList = new ArrayList<>(); fragmentList.add(new UnreadFragment()); fragmentList.add(new ReadFragment()); - SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager(), pageTitles, fragmentList); dashboardViewPager.setAdapter(adapter); //绑定TabLayout topTabLayout.setupWithViewPager(dashboardViewPager); @@ -59,27 +55,4 @@ protected void initEvent() { } - - class SubViewPagerAdapter extends FragmentPagerAdapter { - - SubViewPagerAdapter(FragmentManager fm) { - super(fm); - } - - @NotNull - @Override - public Fragment getItem(int position) { - return fragmentList.get(position); - } - - @Override - public int getCount() { - return fragmentList.size(); - } - - @Override - public CharSequence getPageTitle(int position) { - return pageTitles[position]; - } - } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java new file mode 100644 index 0000000..3da2fe2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:42 + * @email : 290677893@qq.com + **/ +public class ExcelFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_excel; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java new file mode 100644 index 0000000..3afb0b8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java @@ -0,0 +1,139 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.graphics.Color; +import android.text.TextUtils; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.presenter.EventSourcePresenterImpl; +import com.casic.dcms.mvp.view.IEventSourceView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.ToastHelper; +import com.github.mikephil.charting.charts.PieChart; +import com.github.mikephil.charting.components.Legend; +import com.github.mikephil.charting.data.PieData; +import com.github.mikephil.charting.data.PieDataSet; +import com.github.mikephil.charting.data.PieEntry; +import com.github.mikephil.charting.formatter.PercentFormatter; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:43 + * @email : 290677893@qq.com + **/ +public class PieChartFragment extends BaseFragment implements IEventSourceView { + + private static final String TAG = "PieChartFragment"; + @BindView(R.id.pieChartView) + PieChart pieChartView; + + private Context context; + private EventSourcePresenterImpl eventSourcePresenter; + private List entries; + private String begTime; + private String endTime; + + @Override + protected int initLayoutView() { + return R.layout.fragment_chart; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + begTime = (String) SaveKeyValues.getValue("begTime", ""); + endTime = (String) SaveKeyValues.getValue("endTime", ""); + eventSourcePresenter = new EventSourcePresenterImpl(this); + entries = new ArrayList<>(); + } + + @Override + protected void initEvent() { + if (TextUtils.isEmpty(begTime) || TextUtils.isEmpty(endTime)) { + ToastHelper.showToast("起始时间或者结束时间不对", ToastHelper.ERROR); + return; + } + eventSourcePresenter.onReadyRetrofitRequest(begTime, endTime); + } + + @Override + public void obtainEventSourceResult(EventSourceBean resultBean) { + //将统计数据存本地,提供给表/图页面使用 +// Log.d(TAG, "obtainEventSourceResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeanList = resultBean.getData(); + for (EventSourceBean.DataBean dataBean : dataBeanList) { + float eventNum = Float.parseFloat(dataBean.getEventNum()); + if (eventNum != 0) { + entries.add(new PieEntry(eventNum, dataBean.getCaseSource())); + } + } + initPieChart(); + } + } + + private void initPieChart() { + pieChartView.setDragDecelerationFrictionCoef(0.95f); + pieChartView.setDrawCenterText(false); + pieChartView.getDescription().setEnabled(false); + pieChartView.setRotationAngle(0); + // enable rotation of the chart by touch + pieChartView.setRotationEnabled(true); + pieChartView.setHighlightPerTapEnabled(true); + pieChartView.setDrawEntryLabels(true); + pieChartView.setDrawHoleEnabled(false); + setChartData(); + pieChartView.animateY(1000); + + Legend l = pieChartView.getLegend(); + l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); + l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT); + l.setOrientation(Legend.LegendOrientation.VERTICAL); + l.setDrawInside(false); + l.setXEntrySpace(7f); + l.setYEntrySpace(1f); + l.setYOffset(0f); + // entry label styling + pieChartView.setEntryLabelColor(Color.BLUE); + pieChartView.setEntryLabelTextSize(12f); + pieChartView.setExtraOffsets(30, 30, 30, 30); + } + + private void setChartData() { + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f); + dataSet.setSelectionShift(5f); + dataSet.setColors(Constant.PIE_COLORS); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.GREEN); + dataSet.setValueLinePart1Length(0.6f); + PieData data = new PieData(dataSet); + data.setValueFormatter(new PercentFormatter()); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); + pieChartView.setData(data); + pieChartView.highlightValues(null); + pieChartView.invalidate(); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (eventSourcePresenter != null) { + eventSourcePresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java index 00d8669..73f6799 100644 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java @@ -1,6 +1,9 @@ package com.casic.dcms.utils; import android.content.Context; +import android.graphics.Color; + +import java.util.Random; /** * @Author: Pengxh @@ -11,4 +14,15 @@ public static int getResourcesColor(Context context, int res) { return context.getResources().getColor(res); } + + /** + * 随机颜色 + */ + public static int getRandomColor() { + Random random = new Random(); + int red = random.nextInt(256); + int green = random.nextInt(256); + int blue = random.nextInt(256); + return Color.rgb(red, green, blue); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 4ad3a5d..2c95016 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -1,6 +1,7 @@ package com.casic.dcms.utils; import android.Manifest; +import android.graphics.Color; import com.casic.dcms.R; @@ -37,13 +38,18 @@ Manifest.permission.RECORD_AUDIO, Manifest.permission.CALL_PHONE}; - public static final int SELECT_PICTURE_CODE = 9001; - - public static final int PERMISSIONS_CODE = 999; - - public static final String IP_KEY = "BASE_IP"; - - public static final String LOGIN_OUT_ACTION = "loginOut"; + //先预置十种颜色 + public static final int[] PIE_COLORS = {Color.rgb(181, 194, 202), + Color.rgb(129, 216, 200), Color.rgb(241, 214, 145), + Color.rgb(108, 176, 223), Color.rgb(195, 221, 155), + Color.rgb(251, 215, 191), Color.rgb(237, 189, 189), + Color.rgb(172, 217, 243)}; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final int PERMISSIONS_CODE = 999; + public static final int SELECT_PICTURE_CODE = 9001; + + public static final String IP_KEY = "BASE_IP"; + public static final String LOGIN_OUT_ACTION = "loginOut"; + public static final String EVENT_SOURCE = "eventSourceData"; } 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 e11fe9e..6b22eaf 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 @@ -4,6 +4,7 @@ import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.EventSourceBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PhoneBookBean; @@ -97,4 +98,22 @@ @POST("/mgr/mobileList") Observable obtainPhoneBook(@Header("token") String token, @Field("deptid") String deptid); + + /** + * 获取高发问题 + */ + @FormUrlEncoded + @POST("/departmentAssess/highEventList") + Observable obtainHighEvent(@Header("token") String token, + @Field("begTime") String begTime, + @Field("deptid") String endTime); + + /** + * 获取高发问题 + */ + @FormUrlEncoded + @POST("/departmentAssess/sourceList") + Observable obtainEventSource(@Header("token") String token, + @Field("begTime") String begTime, + @Field("deptid") 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 3e256bd..e20f305 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 @@ -6,6 +6,7 @@ import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.EventSourceBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PhoneBookBean; @@ -147,4 +148,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.obtainPhoneBook(TokenHelper.getToken(), deptid); } + + /** + * 获取高发问题 + */ + public static Observable getHighEventResult(String begTime, String endTime) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainHighEvent(TokenHelper.getToken(), begTime, endTime); + } + + /** + * 获取高发问题 + */ + public static Observable getEventSourceResult(String begTime, String endTime) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainEventSource(TokenHelper.getToken(), begTime, endTime); + } } diff --git a/app/src/main/res/layout/activity_analysis.xml b/app/src/main/res/layout/activity_analysis.xml index e5dab95..aa1aa39 100644 --- a/app/src/main/res/layout/activity_analysis.xml +++ b/app/src/main/res/layout/activity_analysis.xml @@ -35,6 +35,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" + android:hint="请选择" android:textSize="@dimen/titleFontSize" /> + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/mvp/model/EventSourceModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java new file mode 100644 index 0000000..cc3d4d7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:53 + * @email : 290677893@qq.com + **/ +public class EventSourceModelImpl implements IEventSourceModel { + + private OnGetEventSourceListener listener; + + public EventSourceModelImpl(OnGetEventSourceListener sourceListener) { + this.listener = sourceListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetEventSourceListener { + void onSuccess(EventSourceBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getEventSourceResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(EventSourceBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java new file mode 100644 index 0000000..d470ab3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java @@ -0,0 +1,57 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public class HighEventModelImpl implements IHighEventModel { + + private OnGetHighEventListener listener; + + public HighEventModelImpl(OnGetHighEventListener highEventListener) { + this.listener = highEventListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetHighEventListener { + void onSuccess(Object resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getHighEventResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(Object resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java new file mode 100644 index 0000000..ad5709a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IEventSourceModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java new file mode 100644 index 0000000..c86a82a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IHighEventModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java new file mode 100644 index 0000000..bc6c382 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.EventSourceModelImpl; +import com.casic.dcms.mvp.view.IEventSourceView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class EventSourcePresenterImpl extends BasePresenter implements IEventSourcePresenter, EventSourceModelImpl.OnGetEventSourceListener { + + private IEventSourceView view; + private EventSourceModelImpl actionModel; + + public EventSourcePresenterImpl(IEventSourceView sourceView) { + this.view = sourceView; + actionModel = new EventSourceModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(EventSourceBean resultBean) { + view.obtainEventSourceResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java new file mode 100644 index 0000000..045abc3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.HighEventModelImpl; +import com.casic.dcms.mvp.view.IHighEventView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class HighEventPresenterImpl extends BasePresenter implements IHighEventPresenter, HighEventModelImpl.OnGetHighEventListener { + + private IHighEventView view; + private HighEventModelImpl actionModel; + + public HighEventPresenterImpl(IHighEventView highEventView) { + this.view = highEventView; + actionModel = new HighEventModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(Object resultBean) { + view.obtainHighEventResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java new file mode 100644 index 0000000..8d45793 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IEventSourcePresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java new file mode 100644 index 0000000..d2d85fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IHighEventPresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java new file mode 100644 index 0000000..b22af01 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.EventSourceBean; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:48 + * @email : 290677893@qq.com + **/ +public interface IEventSourceView { + void obtainEventSourceResult(EventSourceBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java new file mode 100644 index 0000000..505ab6b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java @@ -0,0 +1,10 @@ +package com.casic.dcms.mvp.view; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:06 + * @email : 290677893@qq.com + **/ +public interface IHighEventView { + void obtainHighEventResult(Object resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 1f959b0..a513a5b 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -1,6 +1,7 @@ package com.casic.dcms.ui; import android.content.Context; +import android.content.Intent; import android.view.View; import android.widget.ImageView; import android.widget.TextView; @@ -14,6 +15,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; import com.jzxiang.pickerview.TimePickerDialog; @@ -71,16 +73,18 @@ adapter.setOnGridItemClickListener(new AnalysisRecycleAdapter.OnGridItemClickListener() { @Override public void onClick(int position) { -// Intent intent = new Intent(); + Intent intent = new Intent(); switch (position) { case 0: - ToastHelper.showToast("问题来源", ToastHelper.INFO); + intent.setClass(context, EventSourceActivity.class); + startActivity(intent); break; case 1: ToastHelper.showToast("案卷状态", ToastHelper.INFO); break; case 2: - ToastHelper.showToast("高发问题", ToastHelper.INFO); + intent.setClass(context, HighEventListActivity.class); + startActivity(intent); break; case 3: ToastHelper.showToast("街道统计", ToastHelper.INFO); @@ -113,10 +117,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - startDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + startDateView.setText(date); + SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: @@ -124,10 +131,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - endDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + endDateView.setText(date); + SaveKeyValues.putValue("endTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; default: diff --git a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java new file mode 100644 index 0000000..019a9dc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java @@ -0,0 +1,76 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.viewpager.widget.ViewPager; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.ui.fragment.ExcelFragment; +import com.casic.dcms.ui.fragment.PieChartFragment; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + **/ +public class EventSourceActivity extends BaseActivity { + + private static final String[] pageTitles = {"表格", "饼状图"}; + @BindView(R.id.resourceTopLayout) + QMUITopBarLayout resourceTopLayout; + @BindView(R.id.eventTabLayout) + TabLayout eventTabLayout; + @BindView(R.id.eventViewPager) + ViewPager eventViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_event_resource; + } + + @Override + protected void setupTopBarLayout() { + resourceTopLayout.setTitle("问题来源").setTextColor(ContextCompat.getColor(this, R.color.white)); + resourceTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + resourceTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); + fragmentList.add(new ExcelFragment()); + fragmentList.add(new PieChartFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); + eventViewPager.setAdapter(adapter); + //绑定TabLayout + eventTabLayout.setupWithViewPager(eventViewPager); + LinearLayout linearLayout = (LinearLayout) eventTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java new file mode 100644 index 0000000..e27d0b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java @@ -0,0 +1,77 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.mvp.presenter.HighEventPresenterImpl; +import com.casic.dcms.mvp.view.IHighEventView; +import com.casic.dcms.utils.SaveKeyValues; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 8:44 + * @email : 290677893@qq.com + **/ +public class HighEventListActivity extends BaseActivity implements IHighEventView { + + private static final String TAG = "HighEventListActivity"; + @BindView(R.id.highEventTopLayout) + QMUITopBarLayout highEventTopLayout; + @BindView(R.id.contentView) + TextView contentView; + + private HighEventPresenterImpl highEventPresenter; + private String begTime; + private String endTime; + + @Override + public int initLayoutView() { + return R.layout.activity_high_event; + } + + @Override + protected void setupTopBarLayout() { + highEventTopLayout.setTitle("高发问题").setTextColor(ContextCompat.getColor(this, R.color.white)); + highEventTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + highEventTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + begTime = (String) SaveKeyValues.getValue("begTime", ""); + endTime = (String) SaveKeyValues.getValue("endTime", ""); + highEventPresenter = new HighEventPresenterImpl(this); + } + + @Override + public void initEvent() { + highEventPresenter.onReadyRetrofitRequest(begTime, endTime); + } + + @Override + public void obtainHighEventResult(Object resultBean) { +// Log.d(TAG, "obtainHighEventResult: " + new Gson().toJson(resultBean)); + contentView.setText(new Gson().toJson(resultBean)); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (highEventPresenter != null) { + highEventPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index 9d64c11..62d4aa2 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -5,16 +5,13 @@ import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; import com.casic.dcms.base.BaseFragment; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.tabs.TabLayout; -import org.jetbrains.annotations.NotNull; - import java.util.ArrayList; import java.util.List; @@ -29,7 +26,6 @@ NoScrollViewPager dashboardViewPager; private Context context; - private List fragmentList; @Override protected int initLayoutView() { @@ -43,10 +39,10 @@ @Override protected void initData() { - fragmentList = new ArrayList<>(); + List fragmentList = new ArrayList<>(); fragmentList.add(new UnreadFragment()); fragmentList.add(new ReadFragment()); - SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager(), pageTitles, fragmentList); dashboardViewPager.setAdapter(adapter); //绑定TabLayout topTabLayout.setupWithViewPager(dashboardViewPager); @@ -59,27 +55,4 @@ protected void initEvent() { } - - class SubViewPagerAdapter extends FragmentPagerAdapter { - - SubViewPagerAdapter(FragmentManager fm) { - super(fm); - } - - @NotNull - @Override - public Fragment getItem(int position) { - return fragmentList.get(position); - } - - @Override - public int getCount() { - return fragmentList.size(); - } - - @Override - public CharSequence getPageTitle(int position) { - return pageTitles[position]; - } - } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java new file mode 100644 index 0000000..3da2fe2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:42 + * @email : 290677893@qq.com + **/ +public class ExcelFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_excel; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java new file mode 100644 index 0000000..3afb0b8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java @@ -0,0 +1,139 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.graphics.Color; +import android.text.TextUtils; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.presenter.EventSourcePresenterImpl; +import com.casic.dcms.mvp.view.IEventSourceView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.ToastHelper; +import com.github.mikephil.charting.charts.PieChart; +import com.github.mikephil.charting.components.Legend; +import com.github.mikephil.charting.data.PieData; +import com.github.mikephil.charting.data.PieDataSet; +import com.github.mikephil.charting.data.PieEntry; +import com.github.mikephil.charting.formatter.PercentFormatter; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:43 + * @email : 290677893@qq.com + **/ +public class PieChartFragment extends BaseFragment implements IEventSourceView { + + private static final String TAG = "PieChartFragment"; + @BindView(R.id.pieChartView) + PieChart pieChartView; + + private Context context; + private EventSourcePresenterImpl eventSourcePresenter; + private List entries; + private String begTime; + private String endTime; + + @Override + protected int initLayoutView() { + return R.layout.fragment_chart; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + begTime = (String) SaveKeyValues.getValue("begTime", ""); + endTime = (String) SaveKeyValues.getValue("endTime", ""); + eventSourcePresenter = new EventSourcePresenterImpl(this); + entries = new ArrayList<>(); + } + + @Override + protected void initEvent() { + if (TextUtils.isEmpty(begTime) || TextUtils.isEmpty(endTime)) { + ToastHelper.showToast("起始时间或者结束时间不对", ToastHelper.ERROR); + return; + } + eventSourcePresenter.onReadyRetrofitRequest(begTime, endTime); + } + + @Override + public void obtainEventSourceResult(EventSourceBean resultBean) { + //将统计数据存本地,提供给表/图页面使用 +// Log.d(TAG, "obtainEventSourceResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeanList = resultBean.getData(); + for (EventSourceBean.DataBean dataBean : dataBeanList) { + float eventNum = Float.parseFloat(dataBean.getEventNum()); + if (eventNum != 0) { + entries.add(new PieEntry(eventNum, dataBean.getCaseSource())); + } + } + initPieChart(); + } + } + + private void initPieChart() { + pieChartView.setDragDecelerationFrictionCoef(0.95f); + pieChartView.setDrawCenterText(false); + pieChartView.getDescription().setEnabled(false); + pieChartView.setRotationAngle(0); + // enable rotation of the chart by touch + pieChartView.setRotationEnabled(true); + pieChartView.setHighlightPerTapEnabled(true); + pieChartView.setDrawEntryLabels(true); + pieChartView.setDrawHoleEnabled(false); + setChartData(); + pieChartView.animateY(1000); + + Legend l = pieChartView.getLegend(); + l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); + l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT); + l.setOrientation(Legend.LegendOrientation.VERTICAL); + l.setDrawInside(false); + l.setXEntrySpace(7f); + l.setYEntrySpace(1f); + l.setYOffset(0f); + // entry label styling + pieChartView.setEntryLabelColor(Color.BLUE); + pieChartView.setEntryLabelTextSize(12f); + pieChartView.setExtraOffsets(30, 30, 30, 30); + } + + private void setChartData() { + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f); + dataSet.setSelectionShift(5f); + dataSet.setColors(Constant.PIE_COLORS); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.GREEN); + dataSet.setValueLinePart1Length(0.6f); + PieData data = new PieData(dataSet); + data.setValueFormatter(new PercentFormatter()); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); + pieChartView.setData(data); + pieChartView.highlightValues(null); + pieChartView.invalidate(); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (eventSourcePresenter != null) { + eventSourcePresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java index 00d8669..73f6799 100644 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java @@ -1,6 +1,9 @@ package com.casic.dcms.utils; import android.content.Context; +import android.graphics.Color; + +import java.util.Random; /** * @Author: Pengxh @@ -11,4 +14,15 @@ public static int getResourcesColor(Context context, int res) { return context.getResources().getColor(res); } + + /** + * 随机颜色 + */ + public static int getRandomColor() { + Random random = new Random(); + int red = random.nextInt(256); + int green = random.nextInt(256); + int blue = random.nextInt(256); + return Color.rgb(red, green, blue); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 4ad3a5d..2c95016 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -1,6 +1,7 @@ package com.casic.dcms.utils; import android.Manifest; +import android.graphics.Color; import com.casic.dcms.R; @@ -37,13 +38,18 @@ Manifest.permission.RECORD_AUDIO, Manifest.permission.CALL_PHONE}; - public static final int SELECT_PICTURE_CODE = 9001; - - public static final int PERMISSIONS_CODE = 999; - - public static final String IP_KEY = "BASE_IP"; - - public static final String LOGIN_OUT_ACTION = "loginOut"; + //先预置十种颜色 + public static final int[] PIE_COLORS = {Color.rgb(181, 194, 202), + Color.rgb(129, 216, 200), Color.rgb(241, 214, 145), + Color.rgb(108, 176, 223), Color.rgb(195, 221, 155), + Color.rgb(251, 215, 191), Color.rgb(237, 189, 189), + Color.rgb(172, 217, 243)}; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final int PERMISSIONS_CODE = 999; + public static final int SELECT_PICTURE_CODE = 9001; + + public static final String IP_KEY = "BASE_IP"; + public static final String LOGIN_OUT_ACTION = "loginOut"; + public static final String EVENT_SOURCE = "eventSourceData"; } 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 e11fe9e..6b22eaf 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 @@ -4,6 +4,7 @@ import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.EventSourceBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PhoneBookBean; @@ -97,4 +98,22 @@ @POST("/mgr/mobileList") Observable obtainPhoneBook(@Header("token") String token, @Field("deptid") String deptid); + + /** + * 获取高发问题 + */ + @FormUrlEncoded + @POST("/departmentAssess/highEventList") + Observable obtainHighEvent(@Header("token") String token, + @Field("begTime") String begTime, + @Field("deptid") String endTime); + + /** + * 获取高发问题 + */ + @FormUrlEncoded + @POST("/departmentAssess/sourceList") + Observable obtainEventSource(@Header("token") String token, + @Field("begTime") String begTime, + @Field("deptid") 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 3e256bd..e20f305 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 @@ -6,6 +6,7 @@ import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.EventSourceBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PhoneBookBean; @@ -147,4 +148,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.obtainPhoneBook(TokenHelper.getToken(), deptid); } + + /** + * 获取高发问题 + */ + public static Observable getHighEventResult(String begTime, String endTime) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainHighEvent(TokenHelper.getToken(), begTime, endTime); + } + + /** + * 获取高发问题 + */ + public static Observable getEventSourceResult(String begTime, String endTime) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainEventSource(TokenHelper.getToken(), begTime, endTime); + } } diff --git a/app/src/main/res/layout/activity_analysis.xml b/app/src/main/res/layout/activity_analysis.xml index e5dab95..aa1aa39 100644 --- a/app/src/main/res/layout/activity_analysis.xml +++ b/app/src/main/res/layout/activity_analysis.xml @@ -35,6 +35,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" + android:hint="请选择" android:textSize="@dimen/titleFontSize" /> + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_high_event.xml b/app/src/main/res/layout/activity_high_event.xml new file mode 100644 index 0000000..bf2053c --- /dev/null +++ b/app/src/main/res/layout/activity_high_event.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/mvp/model/EventSourceModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java new file mode 100644 index 0000000..cc3d4d7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:53 + * @email : 290677893@qq.com + **/ +public class EventSourceModelImpl implements IEventSourceModel { + + private OnGetEventSourceListener listener; + + public EventSourceModelImpl(OnGetEventSourceListener sourceListener) { + this.listener = sourceListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetEventSourceListener { + void onSuccess(EventSourceBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getEventSourceResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(EventSourceBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java new file mode 100644 index 0000000..d470ab3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java @@ -0,0 +1,57 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public class HighEventModelImpl implements IHighEventModel { + + private OnGetHighEventListener listener; + + public HighEventModelImpl(OnGetHighEventListener highEventListener) { + this.listener = highEventListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetHighEventListener { + void onSuccess(Object resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getHighEventResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(Object resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java new file mode 100644 index 0000000..ad5709a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IEventSourceModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java new file mode 100644 index 0000000..c86a82a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IHighEventModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java new file mode 100644 index 0000000..bc6c382 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.EventSourceModelImpl; +import com.casic.dcms.mvp.view.IEventSourceView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class EventSourcePresenterImpl extends BasePresenter implements IEventSourcePresenter, EventSourceModelImpl.OnGetEventSourceListener { + + private IEventSourceView view; + private EventSourceModelImpl actionModel; + + public EventSourcePresenterImpl(IEventSourceView sourceView) { + this.view = sourceView; + actionModel = new EventSourceModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(EventSourceBean resultBean) { + view.obtainEventSourceResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java new file mode 100644 index 0000000..045abc3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.HighEventModelImpl; +import com.casic.dcms.mvp.view.IHighEventView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class HighEventPresenterImpl extends BasePresenter implements IHighEventPresenter, HighEventModelImpl.OnGetHighEventListener { + + private IHighEventView view; + private HighEventModelImpl actionModel; + + public HighEventPresenterImpl(IHighEventView highEventView) { + this.view = highEventView; + actionModel = new HighEventModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(Object resultBean) { + view.obtainHighEventResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java new file mode 100644 index 0000000..8d45793 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IEventSourcePresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java new file mode 100644 index 0000000..d2d85fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IHighEventPresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java new file mode 100644 index 0000000..b22af01 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.EventSourceBean; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:48 + * @email : 290677893@qq.com + **/ +public interface IEventSourceView { + void obtainEventSourceResult(EventSourceBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java new file mode 100644 index 0000000..505ab6b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java @@ -0,0 +1,10 @@ +package com.casic.dcms.mvp.view; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:06 + * @email : 290677893@qq.com + **/ +public interface IHighEventView { + void obtainHighEventResult(Object resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 1f959b0..a513a5b 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -1,6 +1,7 @@ package com.casic.dcms.ui; import android.content.Context; +import android.content.Intent; import android.view.View; import android.widget.ImageView; import android.widget.TextView; @@ -14,6 +15,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; import com.jzxiang.pickerview.TimePickerDialog; @@ -71,16 +73,18 @@ adapter.setOnGridItemClickListener(new AnalysisRecycleAdapter.OnGridItemClickListener() { @Override public void onClick(int position) { -// Intent intent = new Intent(); + Intent intent = new Intent(); switch (position) { case 0: - ToastHelper.showToast("问题来源", ToastHelper.INFO); + intent.setClass(context, EventSourceActivity.class); + startActivity(intent); break; case 1: ToastHelper.showToast("案卷状态", ToastHelper.INFO); break; case 2: - ToastHelper.showToast("高发问题", ToastHelper.INFO); + intent.setClass(context, HighEventListActivity.class); + startActivity(intent); break; case 3: ToastHelper.showToast("街道统计", ToastHelper.INFO); @@ -113,10 +117,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - startDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + startDateView.setText(date); + SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: @@ -124,10 +131,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - endDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + endDateView.setText(date); + SaveKeyValues.putValue("endTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; default: diff --git a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java new file mode 100644 index 0000000..019a9dc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java @@ -0,0 +1,76 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.viewpager.widget.ViewPager; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.ui.fragment.ExcelFragment; +import com.casic.dcms.ui.fragment.PieChartFragment; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + **/ +public class EventSourceActivity extends BaseActivity { + + private static final String[] pageTitles = {"表格", "饼状图"}; + @BindView(R.id.resourceTopLayout) + QMUITopBarLayout resourceTopLayout; + @BindView(R.id.eventTabLayout) + TabLayout eventTabLayout; + @BindView(R.id.eventViewPager) + ViewPager eventViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_event_resource; + } + + @Override + protected void setupTopBarLayout() { + resourceTopLayout.setTitle("问题来源").setTextColor(ContextCompat.getColor(this, R.color.white)); + resourceTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + resourceTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); + fragmentList.add(new ExcelFragment()); + fragmentList.add(new PieChartFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); + eventViewPager.setAdapter(adapter); + //绑定TabLayout + eventTabLayout.setupWithViewPager(eventViewPager); + LinearLayout linearLayout = (LinearLayout) eventTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java new file mode 100644 index 0000000..e27d0b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java @@ -0,0 +1,77 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.mvp.presenter.HighEventPresenterImpl; +import com.casic.dcms.mvp.view.IHighEventView; +import com.casic.dcms.utils.SaveKeyValues; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 8:44 + * @email : 290677893@qq.com + **/ +public class HighEventListActivity extends BaseActivity implements IHighEventView { + + private static final String TAG = "HighEventListActivity"; + @BindView(R.id.highEventTopLayout) + QMUITopBarLayout highEventTopLayout; + @BindView(R.id.contentView) + TextView contentView; + + private HighEventPresenterImpl highEventPresenter; + private String begTime; + private String endTime; + + @Override + public int initLayoutView() { + return R.layout.activity_high_event; + } + + @Override + protected void setupTopBarLayout() { + highEventTopLayout.setTitle("高发问题").setTextColor(ContextCompat.getColor(this, R.color.white)); + highEventTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + highEventTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + begTime = (String) SaveKeyValues.getValue("begTime", ""); + endTime = (String) SaveKeyValues.getValue("endTime", ""); + highEventPresenter = new HighEventPresenterImpl(this); + } + + @Override + public void initEvent() { + highEventPresenter.onReadyRetrofitRequest(begTime, endTime); + } + + @Override + public void obtainHighEventResult(Object resultBean) { +// Log.d(TAG, "obtainHighEventResult: " + new Gson().toJson(resultBean)); + contentView.setText(new Gson().toJson(resultBean)); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (highEventPresenter != null) { + highEventPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index 9d64c11..62d4aa2 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -5,16 +5,13 @@ import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; import com.casic.dcms.base.BaseFragment; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.tabs.TabLayout; -import org.jetbrains.annotations.NotNull; - import java.util.ArrayList; import java.util.List; @@ -29,7 +26,6 @@ NoScrollViewPager dashboardViewPager; private Context context; - private List fragmentList; @Override protected int initLayoutView() { @@ -43,10 +39,10 @@ @Override protected void initData() { - fragmentList = new ArrayList<>(); + List fragmentList = new ArrayList<>(); fragmentList.add(new UnreadFragment()); fragmentList.add(new ReadFragment()); - SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager(), pageTitles, fragmentList); dashboardViewPager.setAdapter(adapter); //绑定TabLayout topTabLayout.setupWithViewPager(dashboardViewPager); @@ -59,27 +55,4 @@ protected void initEvent() { } - - class SubViewPagerAdapter extends FragmentPagerAdapter { - - SubViewPagerAdapter(FragmentManager fm) { - super(fm); - } - - @NotNull - @Override - public Fragment getItem(int position) { - return fragmentList.get(position); - } - - @Override - public int getCount() { - return fragmentList.size(); - } - - @Override - public CharSequence getPageTitle(int position) { - return pageTitles[position]; - } - } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java new file mode 100644 index 0000000..3da2fe2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:42 + * @email : 290677893@qq.com + **/ +public class ExcelFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_excel; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java new file mode 100644 index 0000000..3afb0b8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java @@ -0,0 +1,139 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.graphics.Color; +import android.text.TextUtils; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.presenter.EventSourcePresenterImpl; +import com.casic.dcms.mvp.view.IEventSourceView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.ToastHelper; +import com.github.mikephil.charting.charts.PieChart; +import com.github.mikephil.charting.components.Legend; +import com.github.mikephil.charting.data.PieData; +import com.github.mikephil.charting.data.PieDataSet; +import com.github.mikephil.charting.data.PieEntry; +import com.github.mikephil.charting.formatter.PercentFormatter; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:43 + * @email : 290677893@qq.com + **/ +public class PieChartFragment extends BaseFragment implements IEventSourceView { + + private static final String TAG = "PieChartFragment"; + @BindView(R.id.pieChartView) + PieChart pieChartView; + + private Context context; + private EventSourcePresenterImpl eventSourcePresenter; + private List entries; + private String begTime; + private String endTime; + + @Override + protected int initLayoutView() { + return R.layout.fragment_chart; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + begTime = (String) SaveKeyValues.getValue("begTime", ""); + endTime = (String) SaveKeyValues.getValue("endTime", ""); + eventSourcePresenter = new EventSourcePresenterImpl(this); + entries = new ArrayList<>(); + } + + @Override + protected void initEvent() { + if (TextUtils.isEmpty(begTime) || TextUtils.isEmpty(endTime)) { + ToastHelper.showToast("起始时间或者结束时间不对", ToastHelper.ERROR); + return; + } + eventSourcePresenter.onReadyRetrofitRequest(begTime, endTime); + } + + @Override + public void obtainEventSourceResult(EventSourceBean resultBean) { + //将统计数据存本地,提供给表/图页面使用 +// Log.d(TAG, "obtainEventSourceResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeanList = resultBean.getData(); + for (EventSourceBean.DataBean dataBean : dataBeanList) { + float eventNum = Float.parseFloat(dataBean.getEventNum()); + if (eventNum != 0) { + entries.add(new PieEntry(eventNum, dataBean.getCaseSource())); + } + } + initPieChart(); + } + } + + private void initPieChart() { + pieChartView.setDragDecelerationFrictionCoef(0.95f); + pieChartView.setDrawCenterText(false); + pieChartView.getDescription().setEnabled(false); + pieChartView.setRotationAngle(0); + // enable rotation of the chart by touch + pieChartView.setRotationEnabled(true); + pieChartView.setHighlightPerTapEnabled(true); + pieChartView.setDrawEntryLabels(true); + pieChartView.setDrawHoleEnabled(false); + setChartData(); + pieChartView.animateY(1000); + + Legend l = pieChartView.getLegend(); + l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); + l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT); + l.setOrientation(Legend.LegendOrientation.VERTICAL); + l.setDrawInside(false); + l.setXEntrySpace(7f); + l.setYEntrySpace(1f); + l.setYOffset(0f); + // entry label styling + pieChartView.setEntryLabelColor(Color.BLUE); + pieChartView.setEntryLabelTextSize(12f); + pieChartView.setExtraOffsets(30, 30, 30, 30); + } + + private void setChartData() { + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f); + dataSet.setSelectionShift(5f); + dataSet.setColors(Constant.PIE_COLORS); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.GREEN); + dataSet.setValueLinePart1Length(0.6f); + PieData data = new PieData(dataSet); + data.setValueFormatter(new PercentFormatter()); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); + pieChartView.setData(data); + pieChartView.highlightValues(null); + pieChartView.invalidate(); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (eventSourcePresenter != null) { + eventSourcePresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java index 00d8669..73f6799 100644 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java @@ -1,6 +1,9 @@ package com.casic.dcms.utils; import android.content.Context; +import android.graphics.Color; + +import java.util.Random; /** * @Author: Pengxh @@ -11,4 +14,15 @@ public static int getResourcesColor(Context context, int res) { return context.getResources().getColor(res); } + + /** + * 随机颜色 + */ + public static int getRandomColor() { + Random random = new Random(); + int red = random.nextInt(256); + int green = random.nextInt(256); + int blue = random.nextInt(256); + return Color.rgb(red, green, blue); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 4ad3a5d..2c95016 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -1,6 +1,7 @@ package com.casic.dcms.utils; import android.Manifest; +import android.graphics.Color; import com.casic.dcms.R; @@ -37,13 +38,18 @@ Manifest.permission.RECORD_AUDIO, Manifest.permission.CALL_PHONE}; - public static final int SELECT_PICTURE_CODE = 9001; - - public static final int PERMISSIONS_CODE = 999; - - public static final String IP_KEY = "BASE_IP"; - - public static final String LOGIN_OUT_ACTION = "loginOut"; + //先预置十种颜色 + public static final int[] PIE_COLORS = {Color.rgb(181, 194, 202), + Color.rgb(129, 216, 200), Color.rgb(241, 214, 145), + Color.rgb(108, 176, 223), Color.rgb(195, 221, 155), + Color.rgb(251, 215, 191), Color.rgb(237, 189, 189), + Color.rgb(172, 217, 243)}; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final int PERMISSIONS_CODE = 999; + public static final int SELECT_PICTURE_CODE = 9001; + + public static final String IP_KEY = "BASE_IP"; + public static final String LOGIN_OUT_ACTION = "loginOut"; + public static final String EVENT_SOURCE = "eventSourceData"; } 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 e11fe9e..6b22eaf 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 @@ -4,6 +4,7 @@ import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.EventSourceBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PhoneBookBean; @@ -97,4 +98,22 @@ @POST("/mgr/mobileList") Observable obtainPhoneBook(@Header("token") String token, @Field("deptid") String deptid); + + /** + * 获取高发问题 + */ + @FormUrlEncoded + @POST("/departmentAssess/highEventList") + Observable obtainHighEvent(@Header("token") String token, + @Field("begTime") String begTime, + @Field("deptid") String endTime); + + /** + * 获取高发问题 + */ + @FormUrlEncoded + @POST("/departmentAssess/sourceList") + Observable obtainEventSource(@Header("token") String token, + @Field("begTime") String begTime, + @Field("deptid") 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 3e256bd..e20f305 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 @@ -6,6 +6,7 @@ import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.EventSourceBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PhoneBookBean; @@ -147,4 +148,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.obtainPhoneBook(TokenHelper.getToken(), deptid); } + + /** + * 获取高发问题 + */ + public static Observable getHighEventResult(String begTime, String endTime) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainHighEvent(TokenHelper.getToken(), begTime, endTime); + } + + /** + * 获取高发问题 + */ + public static Observable getEventSourceResult(String begTime, String endTime) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainEventSource(TokenHelper.getToken(), begTime, endTime); + } } diff --git a/app/src/main/res/layout/activity_analysis.xml b/app/src/main/res/layout/activity_analysis.xml index e5dab95..aa1aa39 100644 --- a/app/src/main/res/layout/activity_analysis.xml +++ b/app/src/main/res/layout/activity_analysis.xml @@ -35,6 +35,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" + android:hint="请选择" android:textSize="@dimen/titleFontSize" /> + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_high_event.xml b/app/src/main/res/layout/activity_high_event.xml new file mode 100644 index 0000000..bf2053c --- /dev/null +++ b/app/src/main/res/layout/activity_high_event.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_chart.xml b/app/src/main/res/layout/fragment_chart.xml new file mode 100644 index 0000000..567c484 --- /dev/null +++ b/app/src/main/res/layout/fragment_chart.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 085c9d4..6bd59ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,6 +68,10 @@ implementation 'com.mapbox.mapboxsdk:mapbox-android-sdk:9.2.1' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-annotation-v9:0.9.0' implementation 'com.mapbox.mapboxsdk:mapbox-android-plugin-localization-v9:0.12.0' + //Toast提示 implementation 'com.sdsmdg.tastytoast:tastytoast:0.1.1' + //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //图表 + implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ce130a7..5aec328 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -42,6 +42,8 @@ + + list; + + public SubViewPagerAdapter(FragmentManager fm, String[] pageTitles, List fragmentList) { + super(fm); + this.titles = pageTitles; + this.list = fragmentList; + } + + @NotNull + @Override + public Fragment getItem(int position) { + return list.get(position); + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return titles[position]; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java new file mode 100644 index 0000000..c3bd196 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/bean/EventSourceBean.java @@ -0,0 +1,121 @@ +package com.casic.dcms.bean; + +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 10:07 + * @email : 290677893@qq.com + **/ +public class EventSourceBean { + + /** + * code : 200.0 + * data : [{"caseCode":"1","caseNum":"0","caseSource":"终端-快捷上报","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"2","caseNum":"1","caseSource":"终端-普通上报","componentNum":"0","eorc":"","eventNum":"1"},{"caseCode":"13","caseNum":"0","caseSource":"智慧管网","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"14","caseNum":"0","caseSource":"视频监控","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"15","caseNum":"0","caseSource":"渣土车辆管理","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"16","caseNum":"0","caseSource":"领导委办","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"11","caseNum":"4","caseSource":"热线电话","componentNum":"0","eorc":"","eventNum":"4"},{"caseCode":"12","caseNum":"0","caseSource":"微信公众号","componentNum":"0","eorc":"","eventNum":"0"},{"caseCode":"","caseNum":"5","caseSource":"--","componentNum":"0","eorc":"","eventNum":"5"}] + * message : 请求成功 + * success : true + */ + + private double code; + private String message; + private boolean success; + private List data; + + public double getCode() { + return code; + } + + public void setCode(double code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * caseCode : 1 + * caseNum : 0 + * caseSource : 终端-快捷上报 + * componentNum : 0 + * eorc : + * eventNum : 0 + */ + + 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/mvp/model/EventSourceModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java new file mode 100644 index 0000000..cc3d4d7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/EventSourceModelImpl.java @@ -0,0 +1,58 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:53 + * @email : 290677893@qq.com + **/ +public class EventSourceModelImpl implements IEventSourceModel { + + private OnGetEventSourceListener listener; + + public EventSourceModelImpl(OnGetEventSourceListener sourceListener) { + this.listener = sourceListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetEventSourceListener { + void onSuccess(EventSourceBean resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getEventSourceResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(EventSourceBean resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java new file mode 100644 index 0000000..d470ab3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/HighEventModelImpl.java @@ -0,0 +1,57 @@ +package com.casic.dcms.mvp.model; + +import com.casic.dcms.utils.retrofit.RetrofitServiceManager; + +import rx.Observable; +import rx.Observer; +import rx.Subscription; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public class HighEventModelImpl implements IHighEventModel { + + private OnGetHighEventListener listener; + + public HighEventModelImpl(OnGetHighEventListener highEventListener) { + this.listener = highEventListener; + } + + /** + * 数据回调接口 + */ + public interface OnGetHighEventListener { + void onSuccess(Object resultBean); + + void onFailure(Throwable throwable); + } + + @Override + public Subscription sendRetrofitRequest(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getHighEventResult(begTime, endTime); + return observable.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + if (listener != null) { + listener.onFailure(e); + } + } + + @Override + public void onNext(Object resultBean) { + if (resultBean != null) { + listener.onSuccess(resultBean); + } + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java new file mode 100644 index 0000000..ad5709a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IEventSourceModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IEventSourceModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java new file mode 100644 index 0000000..c86a82a --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/model/IHighEventModel.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.model; + +import rx.Subscription; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:14 + * @email : 290677893@qq.com + **/ +public interface IHighEventModel { + Subscription sendRetrofitRequest(String begTime, String endTime); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java new file mode 100644 index 0000000..bc6c382 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/EventSourcePresenterImpl.java @@ -0,0 +1,42 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.EventSourceModelImpl; +import com.casic.dcms.mvp.view.IEventSourceView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class EventSourcePresenterImpl extends BasePresenter implements IEventSourcePresenter, EventSourceModelImpl.OnGetEventSourceListener { + + private IEventSourceView view; + private EventSourceModelImpl actionModel; + + public EventSourcePresenterImpl(IEventSourceView sourceView) { + this.view = sourceView; + actionModel = new EventSourceModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(EventSourceBean resultBean) { + view.obtainEventSourceResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java new file mode 100644 index 0000000..045abc3 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/HighEventPresenterImpl.java @@ -0,0 +1,41 @@ +package com.casic.dcms.mvp.presenter; + +import com.casic.dcms.mvp.BasePresenter; +import com.casic.dcms.mvp.model.HighEventModelImpl; +import com.casic.dcms.mvp.view.IHighEventView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:10 + * @email : 290677893@qq.com + **/ +public class HighEventPresenterImpl extends BasePresenter implements IHighEventPresenter, HighEventModelImpl.OnGetHighEventListener { + + private IHighEventView view; + private HighEventModelImpl actionModel; + + public HighEventPresenterImpl(IHighEventView highEventView) { + this.view = highEventView; + actionModel = new HighEventModelImpl(this); + } + + @Override + public void onReadyRetrofitRequest(String begTime, String endTime) { + addSubscription(actionModel.sendRetrofitRequest(begTime, endTime)); + } + + @Override + public void disposeRetrofitRequest() { + unSubscription(); + } + + @Override + public void onSuccess(Object resultBean) { + view.obtainHighEventResult(resultBean); + } + + @Override + public void onFailure(Throwable throwable) { + + } +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java new file mode 100644 index 0000000..8d45793 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IEventSourcePresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IEventSourcePresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java new file mode 100644 index 0000000..d2d85fb --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/presenter/IHighEventPresenter.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.presenter; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:11 + * @email : 290677893@qq.com + **/ +public interface IHighEventPresenter { + void onReadyRetrofitRequest(String begTime, String endTime); + + void disposeRetrofitRequest(); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java new file mode 100644 index 0000000..b22af01 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IEventSourceView.java @@ -0,0 +1,12 @@ +package com.casic.dcms.mvp.view; + +import com.casic.dcms.bean.EventSourceBean; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:48 + * @email : 290677893@qq.com + **/ +public interface IEventSourceView { + void obtainEventSourceResult(EventSourceBean resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java new file mode 100644 index 0000000..505ab6b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/mvp/view/IHighEventView.java @@ -0,0 +1,10 @@ +package com.casic.dcms.mvp.view; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:06 + * @email : 290677893@qq.com + **/ +public interface IHighEventView { + void obtainHighEventResult(Object resultBean); +} diff --git a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java index 1f959b0..a513a5b 100644 --- a/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/ui/DataAnalysisActivity.java @@ -1,6 +1,7 @@ package com.casic.dcms.ui; import android.content.Context; +import android.content.Intent; import android.view.View; import android.widget.ImageView; import android.widget.TextView; @@ -14,6 +15,7 @@ import com.casic.dcms.base.BaseActivity; import com.casic.dcms.utils.ColorHelper; import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.SaveKeyValues; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.utils.ToastHelper; import com.jzxiang.pickerview.TimePickerDialog; @@ -71,16 +73,18 @@ adapter.setOnGridItemClickListener(new AnalysisRecycleAdapter.OnGridItemClickListener() { @Override public void onClick(int position) { -// Intent intent = new Intent(); + Intent intent = new Intent(); switch (position) { case 0: - ToastHelper.showToast("问题来源", ToastHelper.INFO); + intent.setClass(context, EventSourceActivity.class); + startActivity(intent); break; case 1: ToastHelper.showToast("案卷状态", ToastHelper.INFO); break; case 2: - ToastHelper.showToast("高发问题", ToastHelper.INFO); + intent.setClass(context, HighEventListActivity.class); + startActivity(intent); break; case 3: ToastHelper.showToast("街道统计", ToastHelper.INFO); @@ -113,10 +117,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - startDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + startDateView.setText(date); + SaveKeyValues.putValue("begTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; case R.id.selectEndDateView: @@ -124,10 +131,13 @@ .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis() + Constant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack((timePickerView, millSeconds) -> { - endDateView.setText(TimeOrDateUtil.rTimestampToDate(millSeconds)); + String date = TimeOrDateUtil.rTimestampToDate(millSeconds); + + endDateView.setText(date); + SaveKeyValues.putValue("endTime", date); }).build().show(getSupportFragmentManager(), "year_month_day"); break; default: diff --git a/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java new file mode 100644 index 0000000..019a9dc --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/EventSourceActivity.java @@ -0,0 +1,76 @@ +package com.casic.dcms.ui; + +import android.content.Context; +import android.view.View; +import android.widget.LinearLayout; + +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.viewpager.widget.ViewPager; + +import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.ui.fragment.ExcelFragment; +import com.casic.dcms.ui.fragment.PieChartFragment; +import com.google.android.material.tabs.TabLayout; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + **/ +public class EventSourceActivity extends BaseActivity { + + private static final String[] pageTitles = {"表格", "饼状图"}; + @BindView(R.id.resourceTopLayout) + QMUITopBarLayout resourceTopLayout; + @BindView(R.id.eventTabLayout) + TabLayout eventTabLayout; + @BindView(R.id.eventViewPager) + ViewPager eventViewPager; + + private Context context = this; + + @Override + public int initLayoutView() { + return R.layout.activity_event_resource; + } + + @Override + protected void setupTopBarLayout() { + resourceTopLayout.setTitle("问题来源").setTextColor(ContextCompat.getColor(this, R.color.white)); + resourceTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + resourceTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + List fragmentList = new ArrayList<>(); + fragmentList.add(new ExcelFragment()); + fragmentList.add(new PieChartFragment()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), pageTitles, fragmentList); + eventViewPager.setAdapter(adapter); + //绑定TabLayout + eventTabLayout.setupWithViewPager(eventViewPager); + LinearLayout linearLayout = (LinearLayout) eventTabLayout.getChildAt(0); + linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE); + linearLayout.setDividerDrawable(ContextCompat.getDrawable(context, R.drawable.layout_divider_vertical)); + } + + @Override + public void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java new file mode 100644 index 0000000..e27d0b5 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/HighEventListActivity.java @@ -0,0 +1,77 @@ +package com.casic.dcms.ui; + +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseActivity; +import com.casic.dcms.mvp.presenter.HighEventPresenterImpl; +import com.casic.dcms.mvp.view.IHighEventView; +import com.casic.dcms.utils.SaveKeyValues; +import com.google.gson.Gson; +import com.qmuiteam.qmui.widget.QMUITopBarLayout; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 8:44 + * @email : 290677893@qq.com + **/ +public class HighEventListActivity extends BaseActivity implements IHighEventView { + + private static final String TAG = "HighEventListActivity"; + @BindView(R.id.highEventTopLayout) + QMUITopBarLayout highEventTopLayout; + @BindView(R.id.contentView) + TextView contentView; + + private HighEventPresenterImpl highEventPresenter; + private String begTime; + private String endTime; + + @Override + public int initLayoutView() { + return R.layout.activity_high_event; + } + + @Override + protected void setupTopBarLayout() { + highEventTopLayout.setTitle("高发问题").setTextColor(ContextCompat.getColor(this, R.color.white)); + highEventTopLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.mainThemeColor)); + highEventTopLayout.addLeftImageButton(R.drawable.ic_left_white, 1).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + @Override + public void initData() { + begTime = (String) SaveKeyValues.getValue("begTime", ""); + endTime = (String) SaveKeyValues.getValue("endTime", ""); + highEventPresenter = new HighEventPresenterImpl(this); + } + + @Override + public void initEvent() { + highEventPresenter.onReadyRetrofitRequest(begTime, endTime); + } + + @Override + public void obtainHighEventResult(Object resultBean) { +// Log.d(TAG, "obtainHighEventResult: " + new Gson().toJson(resultBean)); + contentView.setText(new Gson().toJson(resultBean)); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (highEventPresenter != null) { + highEventPresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java index 9d64c11..62d4aa2 100644 --- a/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java +++ b/app/src/main/java/com/casic/dcms/ui/fragment/DashBoardPageFragment.java @@ -5,16 +5,13 @@ import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; import com.casic.dcms.R; +import com.casic.dcms.adapter.SubViewPagerAdapter; import com.casic.dcms.base.BaseFragment; import com.casic.dcms.widgets.NoScrollViewPager; import com.google.android.material.tabs.TabLayout; -import org.jetbrains.annotations.NotNull; - import java.util.ArrayList; import java.util.List; @@ -29,7 +26,6 @@ NoScrollViewPager dashboardViewPager; private Context context; - private List fragmentList; @Override protected int initLayoutView() { @@ -43,10 +39,10 @@ @Override protected void initData() { - fragmentList = new ArrayList<>(); + List fragmentList = new ArrayList<>(); fragmentList.add(new UnreadFragment()); fragmentList.add(new ReadFragment()); - SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager()); + SubViewPagerAdapter adapter = new SubViewPagerAdapter(getChildFragmentManager(), pageTitles, fragmentList); dashboardViewPager.setAdapter(adapter); //绑定TabLayout topTabLayout.setupWithViewPager(dashboardViewPager); @@ -59,27 +55,4 @@ protected void initEvent() { } - - class SubViewPagerAdapter extends FragmentPagerAdapter { - - SubViewPagerAdapter(FragmentManager fm) { - super(fm); - } - - @NotNull - @Override - public Fragment getItem(int position) { - return fragmentList.get(position); - } - - @Override - public int getCount() { - return fragmentList.size(); - } - - @Override - public CharSequence getPageTitle(int position) { - return pageTitles[position]; - } - } } diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java new file mode 100644 index 0000000..3da2fe2 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/ExcelFragment.java @@ -0,0 +1,31 @@ +package com.casic.dcms.ui.fragment; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:42 + * @email : 290677893@qq.com + **/ +public class ExcelFragment extends BaseFragment { + @Override + protected int initLayoutView() { + return R.layout.fragment_excel; + } + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java b/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java new file mode 100644 index 0000000..3afb0b8 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/ui/fragment/PieChartFragment.java @@ -0,0 +1,139 @@ +package com.casic.dcms.ui.fragment; + +import android.content.Context; +import android.graphics.Color; +import android.text.TextUtils; + +import com.casic.dcms.R; +import com.casic.dcms.base.BaseFragment; +import com.casic.dcms.bean.EventSourceBean; +import com.casic.dcms.mvp.presenter.EventSourcePresenterImpl; +import com.casic.dcms.mvp.view.IEventSourceView; +import com.casic.dcms.utils.Constant; +import com.casic.dcms.utils.SaveKeyValues; +import com.casic.dcms.utils.ToastHelper; +import com.github.mikephil.charting.charts.PieChart; +import com.github.mikephil.charting.components.Legend; +import com.github.mikephil.charting.data.PieData; +import com.github.mikephil.charting.data.PieDataSet; +import com.github.mikephil.charting.data.PieEntry; +import com.github.mikephil.charting.formatter.PercentFormatter; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.BindView; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:43 + * @email : 290677893@qq.com + **/ +public class PieChartFragment extends BaseFragment implements IEventSourceView { + + private static final String TAG = "PieChartFragment"; + @BindView(R.id.pieChartView) + PieChart pieChartView; + + private Context context; + private EventSourcePresenterImpl eventSourcePresenter; + private List entries; + private String begTime; + private String endTime; + + @Override + protected int initLayoutView() { + return R.layout.fragment_chart; + } + + @Override + protected void setupTopBarLayout() { + context = getContext(); + } + + @Override + protected void initData() { + begTime = (String) SaveKeyValues.getValue("begTime", ""); + endTime = (String) SaveKeyValues.getValue("endTime", ""); + eventSourcePresenter = new EventSourcePresenterImpl(this); + entries = new ArrayList<>(); + } + + @Override + protected void initEvent() { + if (TextUtils.isEmpty(begTime) || TextUtils.isEmpty(endTime)) { + ToastHelper.showToast("起始时间或者结束时间不对", ToastHelper.ERROR); + return; + } + eventSourcePresenter.onReadyRetrofitRequest(begTime, endTime); + } + + @Override + public void obtainEventSourceResult(EventSourceBean resultBean) { + //将统计数据存本地,提供给表/图页面使用 +// Log.d(TAG, "obtainEventSourceResult: " + new Gson().toJson(resultBean)); + if (resultBean.isSuccess()) { + List dataBeanList = resultBean.getData(); + for (EventSourceBean.DataBean dataBean : dataBeanList) { + float eventNum = Float.parseFloat(dataBean.getEventNum()); + if (eventNum != 0) { + entries.add(new PieEntry(eventNum, dataBean.getCaseSource())); + } + } + initPieChart(); + } + } + + private void initPieChart() { + pieChartView.setDragDecelerationFrictionCoef(0.95f); + pieChartView.setDrawCenterText(false); + pieChartView.getDescription().setEnabled(false); + pieChartView.setRotationAngle(0); + // enable rotation of the chart by touch + pieChartView.setRotationEnabled(true); + pieChartView.setHighlightPerTapEnabled(true); + pieChartView.setDrawEntryLabels(true); + pieChartView.setDrawHoleEnabled(false); + setChartData(); + pieChartView.animateY(1000); + + Legend l = pieChartView.getLegend(); + l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); + l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT); + l.setOrientation(Legend.LegendOrientation.VERTICAL); + l.setDrawInside(false); + l.setXEntrySpace(7f); + l.setYEntrySpace(1f); + l.setYOffset(0f); + // entry label styling + pieChartView.setEntryLabelColor(Color.BLUE); + pieChartView.setEntryLabelTextSize(12f); + pieChartView.setExtraOffsets(30, 30, 30, 30); + } + + private void setChartData() { + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setSliceSpace(0f); + dataSet.setSelectionShift(5f); + dataSet.setColors(Constant.PIE_COLORS); + dataSet.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); + dataSet.setValueLineColor(Color.GREEN); + dataSet.setValueLinePart1Length(0.6f); + PieData data = new PieData(dataSet); + data.setValueFormatter(new PercentFormatter()); + data.setValueTextSize(12f); + data.setValueTextColor(Color.BLUE); + pieChartView.setData(data); + pieChartView.highlightValues(null); + pieChartView.invalidate(); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (eventSourcePresenter != null) { + eventSourcePresenter.disposeRetrofitRequest(); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java index 00d8669..73f6799 100644 --- a/app/src/main/java/com/casic/dcms/utils/ColorHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ColorHelper.java @@ -1,6 +1,9 @@ package com.casic.dcms.utils; import android.content.Context; +import android.graphics.Color; + +import java.util.Random; /** * @Author: Pengxh @@ -11,4 +14,15 @@ public static int getResourcesColor(Context context, int res) { return context.getResources().getColor(res); } + + /** + * 随机颜色 + */ + public static int getRandomColor() { + Random random = new Random(); + int red = random.nextInt(256); + int green = random.nextInt(256); + int blue = random.nextInt(256); + return Color.rgb(red, green, blue); + } } diff --git a/app/src/main/java/com/casic/dcms/utils/Constant.java b/app/src/main/java/com/casic/dcms/utils/Constant.java index 4ad3a5d..2c95016 100644 --- a/app/src/main/java/com/casic/dcms/utils/Constant.java +++ b/app/src/main/java/com/casic/dcms/utils/Constant.java @@ -1,6 +1,7 @@ package com.casic.dcms.utils; import android.Manifest; +import android.graphics.Color; import com.casic.dcms.R; @@ -37,13 +38,18 @@ Manifest.permission.RECORD_AUDIO, Manifest.permission.CALL_PHONE}; - public static final int SELECT_PICTURE_CODE = 9001; - - public static final int PERMISSIONS_CODE = 999; - - public static final String IP_KEY = "BASE_IP"; - - public static final String LOGIN_OUT_ACTION = "loginOut"; + //先预置十种颜色 + public static final int[] PIE_COLORS = {Color.rgb(181, 194, 202), + Color.rgb(129, 216, 200), Color.rgb(241, 214, 145), + Color.rgb(108, 176, 223), Color.rgb(195, 221, 155), + Color.rgb(251, 215, 191), Color.rgb(237, 189, 189), + Color.rgb(172, 217, 243)}; public static final long FIVE_YEARS = 5L * 365 * 1000 * 60 * 60 * 24L; + public static final int PERMISSIONS_CODE = 999; + public static final int SELECT_PICTURE_CODE = 9001; + + public static final String IP_KEY = "BASE_IP"; + public static final String LOGIN_OUT_ACTION = "loginOut"; + public static final String EVENT_SOURCE = "eventSourceData"; } 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 e11fe9e..6b22eaf 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 @@ -4,6 +4,7 @@ import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.EventSourceBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PhoneBookBean; @@ -97,4 +98,22 @@ @POST("/mgr/mobileList") Observable obtainPhoneBook(@Header("token") String token, @Field("deptid") String deptid); + + /** + * 获取高发问题 + */ + @FormUrlEncoded + @POST("/departmentAssess/highEventList") + Observable obtainHighEvent(@Header("token") String token, + @Field("begTime") String begTime, + @Field("deptid") String endTime); + + /** + * 获取高发问题 + */ + @FormUrlEncoded + @POST("/departmentAssess/sourceList") + Observable obtainEventSource(@Header("token") String token, + @Field("begTime") String begTime, + @Field("deptid") 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 3e256bd..e20f305 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 @@ -6,6 +6,7 @@ import com.casic.dcms.bean.CaseSmallClassBean; import com.casic.dcms.bean.ChangePasswordResultBean; import com.casic.dcms.bean.DeptTreeBean; +import com.casic.dcms.bean.EventSourceBean; import com.casic.dcms.bean.LoginOutResultBean; import com.casic.dcms.bean.LoginResultBean; import com.casic.dcms.bean.PhoneBookBean; @@ -147,4 +148,22 @@ RetrofitService service = retrofit.create(RetrofitService.class); return service.obtainPhoneBook(TokenHelper.getToken(), deptid); } + + /** + * 获取高发问题 + */ + public static Observable getHighEventResult(String begTime, String endTime) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainHighEvent(TokenHelper.getToken(), begTime, endTime); + } + + /** + * 获取高发问题 + */ + public static Observable getEventSourceResult(String begTime, String endTime) { + Retrofit retrofit = createRetrofit(); + RetrofitService service = retrofit.create(RetrofitService.class); + return service.obtainEventSource(TokenHelper.getToken(), begTime, endTime); + } } diff --git a/app/src/main/res/layout/activity_analysis.xml b/app/src/main/res/layout/activity_analysis.xml index e5dab95..aa1aa39 100644 --- a/app/src/main/res/layout/activity_analysis.xml +++ b/app/src/main/res/layout/activity_analysis.xml @@ -35,6 +35,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" + android:hint="请选择" android:textSize="@dimen/titleFontSize" /> + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_high_event.xml b/app/src/main/res/layout/activity_high_event.xml new file mode 100644 index 0000000..bf2053c --- /dev/null +++ b/app/src/main/res/layout/activity_high_event.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_chart.xml b/app/src/main/res/layout/fragment_chart.xml new file mode 100644 index 0000000..567c484 --- /dev/null +++ b/app/src/main/res/layout/fragment_chart.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_excel.xml b/app/src/main/res/layout/fragment_excel.xml new file mode 100644 index 0000000..3509b84 --- /dev/null +++ b/app/src/main/res/layout/fragment_excel.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file