|
...
|
...
|
@@ -343,15 +343,43 @@ public class DataService { |
|
|
|
List<Map<String, Object>> tempDataList = queryDeviceIdAndDataType(deviceId, startTime, endTime); //获取设备id和数据类型
|
|
|
|
if(null != tempDataList && tempDataList.size()!=0)
|
|
|
|
{
|
|
|
|
|
|
|
|
Map<String,String> dataTypeMap = new HashMap<>();
|
|
|
|
if (StringUtils.isEmpty(dataType))
|
|
|
|
{
|
|
|
|
List<Map<String, Object>> dataTpyeList = queryDeviceIdAndDefaultDataType(deviceId, startTime, endTime);
|
|
|
|
for (Map<String, Object> map:dataTpyeList)
|
|
|
|
{
|
|
|
|
String device_info_id = map.get("device_info_id")+"";
|
|
|
|
String all_data_value = map.get("all_data_value")+"";
|
|
|
|
if(!dataTypeMap.containsKey(device_info_id))
|
|
|
|
{
|
|
|
|
dataTypeMap.put(device_info_id,"");
|
|
|
|
}
|
|
|
|
if(StringUtils.isNotEmpty(all_data_value))
|
|
|
|
{
|
|
|
|
for (String data_value:all_data_value.split(","))
|
|
|
|
{
|
|
|
|
dataTypeMap.put(device_info_id,dataTypeMap.get(device_info_id)+","+deviceTypeToDataTypeMap.get(data_value));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Map<String,StringBuffer> deviceAndDataTypeDataMap = new HashMap();
|
|
|
|
for(Map<String, Object> deviceAndDataTypeMap:tempDataList) //遍历设备id和数据类型,获取曲线数据
|
|
|
|
{
|
|
|
|
String deviceInfoId = deviceAndDataTypeMap.get("device_info_id")+"";
|
|
|
|
String dbDataType = deviceAndDataTypeMap.get("data_type")+"";
|
|
|
|
|
|
|
|
if (StringUtils.isNotEmpty(dataType) && !((","+dataType+",").indexOf(dbDataType+",")>=0)) ///数据类型过滤
|
|
|
|
{
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (StringUtils.isEmpty(dataType) && !((","+dataTypeMap.get(deviceInfoId)+",").indexOf(dbDataType+",")>=0)) ///数据类型过滤
|
|
|
|
{
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
String key = deviceInfoId+"-"+dbDataType;
|
|
|
|
if (!deviceAndDataTypeDataMap.containsKey(key))
|
|
|
|
{
|
|
...
|
...
|
@@ -410,6 +438,30 @@ public class DataService { |
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
public List<Map<String, Object>> queryDeviceIdAndDefaultDataType(String deviceId,int startTime,int endTime)
|
|
|
|
{
|
|
|
|
List<String> tableNames = getTableNames(startTime, endTime);
|
|
|
|
|
|
|
|
// 每次查询的最大天数,超过则分批查询
|
|
|
|
int BATCH_QUERY_DAYS = 30;
|
|
|
|
|
|
|
|
if(null != tableNames && tableNames.size() !=0 && null != tableNames.get(0) )
|
|
|
|
{
|
|
|
|
List<Map<String, Object>> deviceSensorDataList = new ArrayList<>();
|
|
|
|
|
|
|
|
// **分批查询**(一次最多查 30 天)
|
|
|
|
for (int i = 0; i < tableNames.size(); i += BATCH_QUERY_DAYS) {
|
|
|
|
int batchStart = i;
|
|
|
|
int batchEnd = Math.min(i + BATCH_QUERY_DAYS, tableNames.size());
|
|
|
|
List<String> batchTables = tableNames.subList(batchStart, batchEnd);
|
|
|
|
List<Map<String, Object>> tempDataList = queryDeviceIdAndDataTypeIsTypes(batchTables, deviceId, startTime, endTime);
|
|
|
|
deviceSensorDataList.addAll(tempDataList);
|
|
|
|
}
|
|
|
|
return deviceSensorDataList;
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 获取数据指定天的数据
|
|
|
|
*
|
|
...
|
...
|
@@ -560,6 +612,47 @@ public class DataService { |
|
|
|
return publicMapper.getObjectListBySQL(finalSql);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 在指定时间范围内,查询出所有表中出现过的设备ID和数据类型的对应关系
|
|
|
|
*/
|
|
|
|
private List<Map<String, Object>> queryDeviceIdAndDataTypeIsTypes(List<String> tableNames, String deviceId, int startTime, int endTime) {
|
|
|
|
StringBuilder sqlBuilder = new StringBuilder(" SELECT\n" +
|
|
|
|
"device_info_id,\n" +
|
|
|
|
"data_value,\n" +
|
|
|
|
"MIN(creat_time) AS creat_time FROM (");
|
|
|
|
for (int i = 0; i < tableNames.size(); i++) {
|
|
|
|
if (i > 0) {
|
|
|
|
sqlBuilder.append(" UNION ALL ");
|
|
|
|
}
|
|
|
|
sqlBuilder.append("SELECT device_info_id, data_value, creat_time FROM ")
|
|
|
|
.append(tableNames.get(i))
|
|
|
|
.append(" WHERE device_info_id LIKE '").append(deviceId).append("%'")
|
|
|
|
.append(" AND creat_time BETWEEN ").append(startTime).append(" AND ").append(endTime).append(" AND data_type = 'type'");
|
|
|
|
}
|
|
|
|
sqlBuilder.append(") u GROUP BY device_info_id, data_value");
|
|
|
|
// 外层去重并排序(防止重复)
|
|
|
|
String finalSql = "SELECT device_info_id, GROUP_CONCAT(data_value ORDER BY creat_time SEPARATOR ',') AS all_data_value FROM (" + sqlBuilder + ") t GROUP BY device_info_id ORDER BY device_info_id";
|
|
|
|
|
|
|
|
return publicMapper.getObjectListBySQL(finalSql);
|
|
|
|
}
|
|
|
|
|
|
|
|
private static Map<String,String> deviceTypeToDataTypeMap = new HashMap<>();
|
|
|
|
static {
|
|
|
|
deviceTypeToDataTypeMap.put("1", "ecus,wt");
|
|
|
|
deviceTypeToDataTypeMap.put("2", "ecms,wt");
|
|
|
|
deviceTypeToDataTypeMap.put("3", "pH,wt");
|
|
|
|
deviceTypeToDataTypeMap.put("4", "orp");
|
|
|
|
deviceTypeToDataTypeMap.put("5", "wt,dom,dop");
|
|
|
|
deviceTypeToDataTypeMap.put("6", "nh3n,wt");
|
|
|
|
deviceTypeToDataTypeMap.put("7", "td,wt");
|
|
|
|
deviceTypeToDataTypeMap.put("8", "sal,wt");
|
|
|
|
deviceTypeToDataTypeMap.put("9", "cod,wt");
|
|
|
|
deviceTypeToDataTypeMap.put("10", "cl2,wt");
|
|
|
|
deviceTypeToDataTypeMap.put("11", "chl,wt");
|
|
|
|
deviceTypeToDataTypeMap.put("12", "bga,wt");
|
|
|
|
deviceTypeToDataTypeMap.put("13", "tp,wt");
|
|
|
|
deviceTypeToDataTypeMap.put("14", "ss,wt");
|
|
|
|
deviceTypeToDataTypeMap.put("15", "oiw,wt");
|
|
|
|
deviceTypeToDataTypeMap.put("16", "yw");
|
|
|
|
}
|
|
|
|
} |
...
|
...
|
|