曲线图-测振测温设备温度完成

master
wenfei 2 months ago
parent dcbde07b38
commit f63882df15

@ -1041,7 +1041,7 @@
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
android:name=".ui.activity.YXSBSSSJHisInfoActivity"
android:screenOrientation="portrait"
android:screenOrientation="landscape"
android:windowSoftInputMode="adjustResize|stateHidden" />
<activity
android:name=".ui.activity.BaseWebActivity"

@ -17,7 +17,7 @@ public class DeviceAlarmInfoLineChartBean extends DeviceAlarmBaseBean {
public static class DeviceVibrationMonitoringData {
// 设备时间
private Date deviceTime;
private String deviceTime;
// --- 温度
private Double temperature;
// --- 轴位移
@ -50,11 +50,11 @@ public class DeviceAlarmInfoLineChartBean extends DeviceAlarmBaseBean {
private Double yFreq;
private Double zFreq;
public Date getDeviceTime() {
public String getDeviceTime() {
return deviceTime;
}
public void setDeviceTime(Date deviceTime) {
public void setDeviceTime(String deviceTime) {
this.deviceTime = deviceTime;
}

@ -11,6 +11,8 @@ import com.rehome.zhdcoa.utils.GsonUtils
class DeviceAlarmInfoDetailActivity : BaseActivityOaToolbarViewBinding<ActivityDeviceAlarmInfoDetailBinding>() {
private var deviceCode:String?=null
private var deviceName:String?=null
override fun getViewBinding() = ActivityDeviceAlarmInfoDetailBinding.inflate(layoutInflater)
override fun getToolbar() = binding.toolbarView.toolbar
@ -21,6 +23,7 @@ class DeviceAlarmInfoDetailActivity : BaseActivityOaToolbarViewBinding<ActivityD
val intent = Intent(context, DeviceAlarmInfoLineChartActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP)
intent.putExtra("deviceCode",GsonUtils.GsonString(deviceCode))
intent.putExtra("deviceName",GsonUtils.GsonString(deviceName))
startActivity(intent)
}else{
showToast("设备编码不存在")
@ -41,6 +44,7 @@ class DeviceAlarmInfoDetailActivity : BaseActivityOaToolbarViewBinding<ActivityD
}else{
showLog(itemDeviceWarning.warningTime)
deviceCode = itemDeviceWarning.deviceCode
deviceName = itemDeviceWarning.deviceName
binding.itemZt.tvBjz.text=itemDeviceWarning.statusStr //状态
binding.itemLx.tvBjz.text=itemDeviceWarning.typeStr //类型
binding.itemYjsj.tvBjz.text=itemDeviceWarning.warningTime //预警时间

@ -2,18 +2,39 @@ package com.rehome.zhdcoa.ui.activity;
import static com.rehome.zhdcoa.utils.GsonUtils.GsonToBean;
import android.graphics.Color;
import android.graphics.drawable.GradientDrawable;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.RadioGroup;
import android.widget.Toast;
import androidx.activity.EdgeToEdge;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import com.github.mikephil.charting.components.Description;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.formatter.IValueFormatter;
import com.github.mikephil.charting.formatter.IndexAxisValueFormatter;
import com.github.mikephil.charting.formatter.ValueFormatter;
import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
import com.github.mikephil.charting.utils.ViewPortHandler;
import com.rehome.zhdcoa.Contans;
import com.rehome.zhdcoa.R;
import com.rehome.zhdcoa.base.BaseViewBindingActivity;
@ -22,15 +43,21 @@ import com.rehome.zhdcoa.bean.DeviceAlarmInfoLineChartBean;
import com.rehome.zhdcoa.bean.MemberTrackBean;
import com.rehome.zhdcoa.databinding.ActivityDeviceAlarmInfoLineChartBinding;
import com.rehome.zhdcoa.databinding.ActivityKcpdTypeBinding;
import com.rehome.zhdcoa.utils.DateUtils;
import com.rehome.zhdcoa.utils.HttpListener;
import com.rehome.zhdcoa.utils.NohttpUtils;
import com.rehome.zhdcoa.weiget.DateTimeMinutePickDialog;
import com.rehome.zhdcoa.weiget.DateTimePickDialog;
import com.yolanda.nohttp.NoHttp;
import com.yolanda.nohttp.RequestMethod;
import com.yolanda.nohttp.rest.Request;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.List;
@ -40,8 +67,15 @@ import javax.net.ssl.SSLSocketFactory;
public class DeviceAlarmInfoLineChartActivity extends BaseViewBindingActivity<ActivityDeviceAlarmInfoLineChartBinding> {
private String deviceCode;
private String deviceName;
//格式化日期的对象(转化成习惯的时间格式)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdfDay = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdfHourMinute = new SimpleDateFormat("HH:mm");
private List<DeviceAlarmInfoLineChartBean.DeviceVibrationMonitoringData> deviceAlarmDataList = new ArrayList<>();
private ArrayList<String> xlabellistdatas = new ArrayList<>();;
@Override
protected ActivityDeviceAlarmInfoLineChartBinding getBinding() {
return ActivityDeviceAlarmInfoLineChartBinding.inflate(LayoutInflater.from(this));
@ -57,57 +91,161 @@ public class DeviceAlarmInfoLineChartActivity extends BaseViewBindingActivity<Ac
this.setStatusBar();
binding.toolbarView.titleYx.setText("曲线图-测振测温设备");
setBack();
//静态方法getInstance()使用默认时区和语言环境获得一个日历。
Calendar calendarNow = Calendar.getInstance();
//add()增加日期以天为单位Calendar封装了很多静态的操作时间的单位
//增加10天负数则为减少天数
calendarNow.add(Calendar.DATE, -1);
//输出增加10天后的时间;
String startTime = sdf.format(calendarNow.getTime());
showLog("startTime: "+startTime);
binding.tvSt.setText(startTime);
Calendar calendarEnd = Calendar.getInstance();
String endTime = sdfDay.format(calendarEnd.getTime())+" 23:59:59";
showLog("endTime: "+endTime);
binding.tvEt.setText(endTime);
binding.tvSt.setOnClickListener(view -> {
try {
Date date = sdf.parse(binding.tvSt.getText().toString());
if(date != null){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
DateTimeMinutePickDialog dialog = new DateTimeMinutePickDialog(context, calendar, true,true, (outPutDate, outPutDate1, outPutDate2) -> {
binding.tvSt.setText(outPutDate+":00");
});
dialog.show();
}
} catch (ParseException e) {
throw new RuntimeException(e);
}
});
binding.tvEt.setOnClickListener(view -> {
try {
Date date = sdf.parse(binding.tvEt.getText().toString());
if(date != null){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
DateTimeMinutePickDialog dialog = new DateTimeMinutePickDialog(context, calendar, true,true, (outPutDate, outPutDate1, outPutDate2) -> {
binding.tvEt.setText(outPutDate+":59");
});
dialog.show();
}
} catch (ParseException e) {
throw new RuntimeException(e);
}
});
initRadioGroup();
String deviceCodeTemp = getIntent().getStringExtra("deviceCode");
if(deviceCodeTemp != null&&deviceCodeTemp.contains("\"")){
deviceCode=deviceCodeTemp.replace("\"","").trim();
}
String deviceNameTemp = getIntent().getStringExtra("deviceName");
if(deviceNameTemp != null&&deviceNameTemp.contains("\"")){
deviceName=deviceNameTemp.replace("\"","").trim();
}
}
@Override
protected void initData() {
//http://10.19.0.17:1700/dserver/device/vibration/monitoring/list?deviceCode=002c005e&startTime=2026-01-21+14:37:00&endTime=2026-01-22+23:59:59&v=1769063841074
/**
* deviceCode
* 002c005e
* startTime
* 2026-01-21 14:37:00
* endTime
* 2026-01-22 23:59:59
* v
* 1769063841074
*/
setDes();
if(deviceCode!=null){
showLog(deviceCode);
getDeviceAlarmInfoLineChartData();
}
}
public void getDeviceAlarmInfoLineChartData() {
//格式化日期的对象(转化成习惯的时间格式)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdfDay = new SimpleDateFormat("yyyy-MM-dd");
//静态方法getInstance()使用默认时区和语言环境获得一个日历。
Calendar calendar = Calendar.getInstance();
//输出当前系统时间;
//System.out.println("当前系统时间: "+sdFormat.format(calendar.getTime()));
//add()增加日期以天为单位Calendar封装了很多静态的操作时间的单位
//增加10天负数则为减少天数
calendar.add(Calendar.DATE, -1);
//输出增加10天后的时间;
String startTime = sdf.format(calendar.getTime());
showLog("startTime: "+startTime);
Calendar calendarEnd = Calendar.getInstance();
String endTime = sdfDay.format(calendarEnd.getTime())+" 23:59:59";
showLog("endTime: "+endTime);
private void initRadioGroup(){
binding.rb1.setOnCheckedChangeListener((buttonView, isChecked) -> {
if(isChecked){
binding.rb1.setChecked(true);
binding.rb2.setChecked(false);
binding.rb3.setChecked(false);
binding.rb4.setChecked(false);
binding.rb5.setChecked(false);
binding.rb6.setChecked(false);
binding.rb7.setChecked(false);
}
});
binding.rb2.setOnCheckedChangeListener((buttonView, isChecked) -> {
if(isChecked){
binding.rb1.setChecked(false);
binding.rb2.setChecked(true);
binding.rb3.setChecked(false);
binding.rb4.setChecked(false);
binding.rb5.setChecked(false);
binding.rb6.setChecked(false);
binding.rb7.setChecked(false);
}
});
binding.rb3.setOnCheckedChangeListener((buttonView, isChecked) -> {
if(isChecked){
binding.rb1.setChecked(false);
binding.rb2.setChecked(false);
binding.rb3.setChecked(true);
binding.rb4.setChecked(false);
binding.rb5.setChecked(false);
binding.rb6.setChecked(false);
binding.rb7.setChecked(false);
}
});
binding.rb4.setOnCheckedChangeListener((buttonView, isChecked) -> {
if(isChecked){
binding.rb1.setChecked(false);
binding.rb2.setChecked(false);
binding.rb3.setChecked(false);
binding.rb4.setChecked(true);
binding.rb5.setChecked(false);
binding.rb6.setChecked(false);
binding.rb7.setChecked(false);
}
});
binding.rb5.setOnCheckedChangeListener((buttonView, isChecked) -> {
if(isChecked){
binding.rb1.setChecked(false);
binding.rb2.setChecked(false);
binding.rb3.setChecked(false);
binding.rb4.setChecked(false);
binding.rb5.setChecked(true);
binding.rb6.setChecked(false);
binding.rb7.setChecked(false);
}
});
binding.rb6.setOnCheckedChangeListener((buttonView, isChecked) -> {
if(isChecked){
binding.rb1.setChecked(false);
binding.rb2.setChecked(false);
binding.rb3.setChecked(false);
binding.rb4.setChecked(false);
binding.rb5.setChecked(false);
binding.rb6.setChecked(true);
binding.rb7.setChecked(false);
}
});
binding.rb7.setOnCheckedChangeListener((buttonView, isChecked) -> {
if(isChecked){
binding.rb1.setChecked(false);
binding.rb2.setChecked(false);
binding.rb3.setChecked(false);
binding.rb4.setChecked(false);
binding.rb5.setChecked(false);
binding.rb6.setChecked(false);
binding.rb7.setChecked(true);
}
});
}
public void getDeviceAlarmInfoLineChartData() {
String url = Contans.IP + Contans.DeviceAlermInfoDataListUrl;
Request<String> request = NoHttp.createStringRequest(url, RequestMethod.GET);
request.add("deviceCode", deviceCode);
request.add("startTime", startTime);
request.add("endTime", endTime);
request.add("startTime", binding.tvSt.getText().toString());
request.add("endTime", binding.tvEt.getText().toString());
NohttpUtils.getInstance().add(this,0, request, new HttpListener<String>() {
@ -121,7 +259,27 @@ public class DeviceAlarmInfoLineChartActivity extends BaseViewBindingActivity<Ac
if(bean!=null && bean.getCode()==20000 && bean.isSuccess() && bean.getData()!=null && !bean.getData().isEmpty()){
deviceAlarmDataList.clear();
deviceAlarmDataList.addAll(bean.getData());
Collections.reverse(deviceAlarmDataList);
List<Entry> entries1 = new ArrayList<>();
for (int i = 0; i < deviceAlarmDataList.size(); i++) {
try {
DeviceAlarmInfoLineChartBean.DeviceVibrationMonitoringData item = deviceAlarmDataList.get(i);
entries1.add(new Entry(i, Float.parseFloat(item.getTemperature().toString())));
Date date = sdf.parse(item.getDeviceTime());
if(date != null){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
xlabellistdatas.add(sdfHourMinute.format(calendar.getTime()));
}
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
showLog(String.valueOf(deviceAlarmDataList.size()));
setDatas(entries1);
}else{
showLog("is emply");
}
}
@ -131,4 +289,80 @@ public class DeviceAlarmInfoLineChartActivity extends BaseViewBindingActivity<Ac
}
});
}
private void setDes() {
Description description = new Description();
description.setText("");
description.setTextSize(10);
description.setTextColor(Color.BLUE);
binding.linechart.setDescription(description);
//透明化图例
Legend legend = binding.linechart.getLegend();
//legend.setForm(Legend.LegendForm.NONE);
legend.setTextColor(Color.GRAY);
legend.setTextSize(13);
binding.linechart.setNoDataText("无数据");
binding.linechart.setExtraBottomOffset(20f);
binding.linechart.setExtraRightOffset(30f);
binding.linechart.setExtraLeftOffset(10f);
}
private void setDatas(List<Entry> datas) {
String deviceNameLine = deviceName+"温度";
List<ILineDataSet> sets = new ArrayList<>();
LineDataSet dataSet1 = new LineDataSet(datas, deviceNameLine);
dataSet1.setValueTextSize(12);
dataSet1.setValueTextColor(Color.parseColor("#FC863E"));
dataSet1.setMode(LineDataSet.Mode.CUBIC_BEZIER);
dataSet1.setLineWidth(1);
dataSet1.setCircleHoleRadius(4);
dataSet1.enableDashedLine(5, 5, 0);
dataSet1.setCircleColor(Color.parseColor("#FC863E"));
dataSet1.setColor(Color.parseColor("#FC863E"));
dataSet1.setDrawHighlightIndicators(false);
dataSet1.setDrawFilled(true);
dataSet1.setFillDrawable(new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[]{Color.argb(127, 235, 170, 106), Color.parseColor("#00FA5544")}));
dataSet1.setLineWidth(1);
dataSet1.setDrawValues(false);
// dataSet1.setValueFormatter(new MyValueFormatter());
sets.add(dataSet1);
LineData lineData = new LineData(sets);
binding.linechart.setData(lineData);
binding.linechart.invalidate();
XAxis xAxis = binding.linechart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxis.setAxisMinimum(1);//设置x轴最小
xAxis.setTextSize(8);
xAxis.setTextColor(Color.parseColor("#FC863E"));
xAxis.setEnabled(true);//是否显示x轴是否禁用
xAxis.setDrawLabels(true); //设置x轴标签 即x轴上显示的数值
xAxis.setDrawGridLines(true);//是否设置x轴上每个点对应的线 即 竖向的网格线
xAxis.enableGridDashedLine(2, 2, 2); //竖线 虚线样式 lineLength控制虚线段的长度 spaceLength控制线之间的空间
xAxis.setLabelRotationAngle(40f);//设置x轴标签的旋转角度
String[] timearray = xlabellistdatas.toArray(new String[xlabellistdatas.size()]);
xAxis.setValueFormatter(new IndexAxisValueFormatter(timearray));
YAxis yAxis = binding.linechart.getAxisRight();
yAxis.setEnabled(false);
float ratio = (float) xlabellistdatas.size() / (float) 10;
if (ratio < 1) {
ratio = 1.0f;
}
//显示的时候是按照多大的比率缩放显示,1f表示不放大缩小
//着重说明一下下面代码的用途
/**
* 0
*
*
*/
binding.linechart.zoom(0f, 1f, 0, 0);
binding.linechart.zoom(ratio, 1f, 0, 0);
//设置为不可缩放
binding.linechart.setScaleEnabled(false);
//设置为可左右滑动
binding.linechart.setDragEnabled(true);
}
}

@ -240,6 +240,9 @@ class LoginActivity : BaseActivityOaToolbarViewBinding<ActivityLoginBinding>() {
binding.etUsername.setText("ZHPS_Admin")
binding.etPassword.setText("Rehome.zhps@996")
// binding.etUsername.setText("310249")
// binding.etPassword.setText("GZgs#@0249")
//公司内网215管理员
// binding.etUsername.setText("ZHPS_Admin")

@ -1,21 +1,204 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.activity.DeviceAlarmInfoLineChartActivity"
android:orientation="vertical">
android:orientation="vertical"
tools:context=".ui.activity.DeviceAlarmInfoLineChartActivity">
<include
android:id="@+id/toolbarView"
layout="@layout/toolbar_yx" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:background="#cccccc"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#dddddd"
android:minHeight="40dp">
<TextView
android:id="@+id/tv_st"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="5px"
android:layout_weight="1"
android:gravity="center"
android:minHeight="50px"
android:text="点击选择开始时间"
android:textSize="15sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_margin="5px"
android:gravity="center"
android:minHeight="50px"
android:text="至"
android:textSize="15sp" />
<TextView
android:id="@+id/tv_et"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="5px"
android:layout_weight="1"
android:gravity="center"
android:minHeight="50px"
android:text="点击选择结束时间"
android:textSize="15sp" />
</LinearLayout>
<RadioGroup
android:id="@+id/rg"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40sp"
android:background="#dddddd"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center|start"
android:orientation="vertical">
<RadioButton
android:id="@+id/rb1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:minHeight="20dp"
android:checked="true"
android:text="温度"
android:textSize="15sp" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center|start"
android:orientation="vertical">
<RadioButton
android:id="@+id/rb2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:minHeight="20dp"
android:text="加速度"
android:textSize="15sp" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center|start"
android:orientation="vertical">
<RadioButton
android:id="@+id/rb3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:minHeight="20dp"
android:text="速度"
android:textSize="15sp" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center|start"
android:orientation="vertical">
<RadioButton
android:id="@+id/rb4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:minHeight="20dp"
android:text="位移"
android:textSize="15sp" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#dddddd"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center|start"
android:orientation="vertical">
<RadioButton
android:id="@+id/rb5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center|start"
android:minHeight="20dp"
android:text="直流分量"
android:textSize="15sp" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center|start"
android:orientation="vertical">
<RadioButton
android:id="@+id/rb6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center|start"
android:minHeight="20dp"
android:text="最强频率"
android:textSize="15sp" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:gravity="center|start"
android:orientation="vertical">
<RadioButton
android:id="@+id/rb7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center|start"
android:minHeight="20dp"
android:text="FREQ对应幅值"
android:textSize="15sp" />
</LinearLayout>
</LinearLayout>
</RadioGroup>
</LinearLayout>
<com.github.mikephil.charting.charts.LineChart
android:id="@+id/linechart"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp" />
android:layout_height="400dp"/>
</LinearLayout>

Loading…
Cancel
Save