|
@@ -7,6 +7,7 @@ import com.example.opc_common.enums.ResultEnum;
|
|
|
import com.example.opc_common.exception.CustomException;
|
|
|
import com.example.opc_common.util.Blank;
|
|
|
import com.example.opc_common.util.ConstantStr;
|
|
|
+import com.example.opc_common.util.DateUtil;
|
|
|
import com.example.opc_da.dao.ItemGroupDao;
|
|
|
import com.example.opc_da.dao.RawDataDao;
|
|
|
import com.example.opc_da.dao.ReportTableDao;
|
|
@@ -490,11 +491,12 @@ public class OpcAsyncTask {
|
|
|
public ReportTableItem genDeviceItem(Integer tableTemplateId, String itemReadName, String dataValue, String dataTime, Long index, Integer timeItemType) {
|
|
|
if (Blank.isNotEmpty(timeItemType)) {
|
|
|
ReportTableItem reportTableItem =
|
|
|
- (ReportTableItem) redisUtil.get(tableTemplateId + ConstantStr.REPORT_TABLE_ITEM + itemReadName + timeItemType);
|
|
|
+ (ReportTableItem) redisUtil.get(tableTemplateId + ConstantStr.REPORT_TABLE_ITEM + itemReadName + ConstantStr.REPORT_TABLE_ITEM + timeItemType);
|
|
|
reportTableItem.setValueList(reportTableItem.getValueList() + "," + dataValue);
|
|
|
reportTableItem.setValueTimeList(reportTableItem.getValueTimeList() + "," + dataTime);
|
|
|
reportTableItem.setValueIndexList(reportTableItem.getValueIndexList() + "," + index);
|
|
|
- redisUtil.set(tableTemplateId + ConstantStr.REPORT_TABLE_ITEM + itemReadName + timeItemType, reportTableItem);
|
|
|
+ asyncAsyncTask.addReportTableItem(reportTableItem);
|
|
|
+ redisUtil.set(tableTemplateId + ConstantStr.REPORT_TABLE_ITEM + itemReadName + ConstantStr.REPORT_TABLE_ITEM + timeItemType, reportTableItem);
|
|
|
return reportTableItem;
|
|
|
} else {
|
|
|
ReportTableItem reportTableItem =
|
|
@@ -502,11 +504,13 @@ public class OpcAsyncTask {
|
|
|
reportTableItem.setValueList(reportTableItem.getValueList() + "," + dataValue);
|
|
|
reportTableItem.setValueTimeList(reportTableItem.getValueTimeList() + "," + dataTime);
|
|
|
reportTableItem.setValueIndexList(reportTableItem.getValueIndexList() + "," + index);
|
|
|
+ asyncAsyncTask.addReportTableItem(reportTableItem);
|
|
|
redisUtil.set(tableTemplateId + ConstantStr.REPORT_TABLE_ITEM + itemReadName, reportTableItem);
|
|
|
return reportTableItem;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ //设备报表因为开关变化一次时间很长,所以redis中数据如果更新,考虑将数据更新到数据库,防止数据丢失
|
|
|
public void packDeviceTable(List<CursorRawData> cursorRawDataList, List<TableTemplate> tableTemplateList,
|
|
|
Map<Integer, Map<String, TableTemplateTableItem>> ttIdMap, Map<Integer, String> itemReadMap,
|
|
|
Map<Integer, ReportTable> reportTableMap, Long index) {
|
|
@@ -518,6 +522,9 @@ public class OpcAsyncTask {
|
|
|
Integer eventNum = tableTemplate.getEventNum();
|
|
|
Integer tableTemplateId = tableTemplate.getId();
|
|
|
String startItemName = itemReadMap.get(startItemId);
|
|
|
+ Integer endItemId = tableTemplate.getEndItemId();
|
|
|
+ String endValue = tableTemplate.getEndValue();
|
|
|
+ String endItemName = itemReadMap.get(endItemId);
|
|
|
//获取开始数据项的数据
|
|
|
CursorRawData startCrData = dataMap.get(startItemName);
|
|
|
//如果开始数据项的数据等于,设定的开始值
|
|
@@ -535,6 +542,17 @@ public class OpcAsyncTask {
|
|
|
}
|
|
|
//如果开始时间的长度和结束时间的长度一样,则符合添加开始时间
|
|
|
if (startNum == endNum) {
|
|
|
+ //将异常的数据去掉
|
|
|
+ ReportTableItem endReportTableItem =
|
|
|
+ (ReportTableItem) redisUtil.get(tableTemplateId + ConstantStr.REPORT_TABLE_ITEM + endItemName + ConstantStr.REPORT_TABLE_ITEM + ConstantStr.END_TIME_ITEM);
|
|
|
+ if (Blank.isNotEmpty(endReportTableItem)) {
|
|
|
+ //获取到结束时间最后一个时间项
|
|
|
+ String valueTimeList = endReportTableItem.getValueTimeList();
|
|
|
+ String[] split = valueTimeList.split(",");
|
|
|
+ if ((DateUtil.strYmdhmssChangeDate(startCrData.getDataValueTime()).getTime() - DateUtil.strYmdhmssChangeDate(split[split.length - 1]).getTime()) < 10000) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
//如果值为0,则需要新增一张报表
|
|
|
if (startNum == 0) {
|
|
|
//获取此模板的主报表
|
|
@@ -552,7 +570,8 @@ public class OpcAsyncTask {
|
|
|
id, startItemId, tttItem.getItemName(), tttItem.getDescribe(), ConstantStr.START_TIME_ITEM, tttItem.getValueType(), tttItem.getXaxis(), tttItem.getYaxis(),
|
|
|
tttItem.getStandby(), startValue, startCrData.getDataValueTime(), index.toString()
|
|
|
);
|
|
|
- redisUtil.set(tableTemplateId + ConstantStr.REPORT_TABLE_ITEM + startItemName + ConstantStr.START_TIME_ITEM, reportTableItem);
|
|
|
+ asyncAsyncTask.addReportTableItem(reportTableItem);
|
|
|
+ redisUtil.set(tableTemplateId + ConstantStr.REPORT_TABLE_ITEM + startItemName + ConstantStr.REPORT_TABLE_ITEM + ConstantStr.START_TIME_ITEM, reportTableItem);
|
|
|
} else {
|
|
|
//开始时间长度不为0,则长度加1,更新开始时间项在redis中的值
|
|
|
redisUtil.set(ConstantStr.START_NUM + tableTemplateId, startNum + 1);
|
|
@@ -562,9 +581,6 @@ public class OpcAsyncTask {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- Integer endItemId = tableTemplate.getEndItemId();
|
|
|
- String endValue = tableTemplate.getEndValue();
|
|
|
- String endItemName = itemReadMap.get(endItemId);
|
|
|
//获取结束数据项的数据
|
|
|
CursorRawData endCrData = dataMap.get(endItemName);
|
|
|
if (endCrData.getDataValue().equals(endValue)) {
|
|
@@ -581,6 +597,17 @@ public class OpcAsyncTask {
|
|
|
}
|
|
|
//如果开始时间的长度大于结束时间的长度,才满足添加结束时间
|
|
|
if (startNum > endNum) {
|
|
|
+ //将异常的数据去掉
|
|
|
+ ReportTableItem startReportTableItem =
|
|
|
+ (ReportTableItem) redisUtil.get(tableTemplateId + ConstantStr.REPORT_TABLE_ITEM + startItemName + ConstantStr.REPORT_TABLE_ITEM + ConstantStr.START_TIME_ITEM);
|
|
|
+ if (Blank.isNotEmpty(startReportTableItem)) {
|
|
|
+ //获取到结束时间最后一个时间项
|
|
|
+ String valueTimeList = startReportTableItem.getValueTimeList();
|
|
|
+ String[] split = valueTimeList.split(",");
|
|
|
+ if ((DateUtil.strYmdhmssChangeDate(endCrData.getDataValueTime()).getTime() - DateUtil.strYmdhmssChangeDate(split[split.length - 1]).getTime()) < 10000) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
//如果结束的长度为0,则为结束时间项
|
|
|
if (endNum == 0) {
|
|
|
//获取子报表中的报表主键
|
|
@@ -596,7 +623,8 @@ public class OpcAsyncTask {
|
|
|
id, endItemId, tttItem.getItemName(), tttItem.getDescribe(), ConstantStr.END_TIME_ITEM, tttItem.getValueType(), tttItem.getXaxis(), tttItem.getYaxis(),
|
|
|
tttItem.getStandby(), endValue, endCrData.getDataValueTime(), index.toString()
|
|
|
);
|
|
|
- redisUtil.set(tableTemplateId + ConstantStr.REPORT_TABLE_ITEM + endItemName + ConstantStr.END_TIME_ITEM, reportTableItem);
|
|
|
+ asyncAsyncTask.addReportTableItem(reportTableItem);
|
|
|
+ redisUtil.set(tableTemplateId + ConstantStr.REPORT_TABLE_ITEM + endItemName + ConstantStr.REPORT_TABLE_ITEM + ConstantStr.END_TIME_ITEM, reportTableItem);
|
|
|
}
|
|
|
} else {
|
|
|
//更新redis中其他数据项信息
|
|
@@ -606,6 +634,7 @@ public class OpcAsyncTask {
|
|
|
id, tttItem.getItemId(), tttItem.getItemName(), tttItem.getDescribe(), null, tttItem.getValueType(), tttItem.getXaxis(), tttItem.getYaxis(),
|
|
|
tttItem.getStandby(), cursorRawData.getDataValue(), cursorRawData.getDataValueTime(), index.toString()
|
|
|
);
|
|
|
+ asyncAsyncTask.addReportTableItem(reportTableItem);
|
|
|
redisUtil.set(tableTemplateId + ConstantStr.REPORT_TABLE_ITEM + tttItem.getItemReadName(), reportTableItem);
|
|
|
}
|
|
|
}
|
|
@@ -625,7 +654,7 @@ public class OpcAsyncTask {
|
|
|
reportTableItemList.add(reportTableItem);
|
|
|
} else if (timeItemType.equals(ConstantStr.START_TIME_ITEM)) {
|
|
|
//获取redis中开始时间项信息
|
|
|
- reportTableItemList.add((ReportTableItem) redisUtil.get(tableTemplateId + ConstantStr.REPORT_TABLE_ITEM + startItemName + ConstantStr.START_TIME_ITEM));
|
|
|
+ reportTableItemList.add((ReportTableItem) redisUtil.get(tableTemplateId + ConstantStr.REPORT_TABLE_ITEM + startItemName + ConstantStr.REPORT_TABLE_ITEM + ConstantStr.START_TIME_ITEM));
|
|
|
}
|
|
|
} else {
|
|
|
//更新redis中其他数据项信息
|
|
@@ -639,8 +668,8 @@ public class OpcAsyncTask {
|
|
|
//将所有数据项信息存入到数据库
|
|
|
asyncAsyncTask.addReportTableItemList(reportTableItemList);
|
|
|
|
|
|
- redisUtil.set(ConstantStr.START_NUM + tableTemplateId, 0);
|
|
|
- redisUtil.set(ConstantStr.END_NUM + tableTemplateId, 0);
|
|
|
+ redisUtil.del(ConstantStr.START_NUM + tableTemplateId);
|
|
|
+ redisUtil.del(ConstantStr.END_NUM + tableTemplateId);
|
|
|
redisUtil.del(ConstantStr.TABLE_ID + tableTemplateId);
|
|
|
//将数据存入数据库归档,删除相应redis的值,并将数据存入数据库
|
|
|
} else {
|