fix: 调整全量和分页查询

dev
huangfeng 1 year ago
parent ef3087d88d
commit d07112b387

@ -14,9 +14,7 @@ public interface DataService {
List<ColumnModel> getDataTableColumns(String tableName) throws Exception;
OnePage<Map<String, Object>> getData(NSensor sensor, List<ModevTypePoint> points, ConditionModel model);
OnePage<Map<String, Object>> getDataByDate(NSensor sensor, List<ModevTypePoint> points, ConditionModel model, int dayPerPage) throws Exception;
OnePage<Map<String, Object>> getData(NSensor sensor, List<ModevTypePoint> points, ConditionModel model) throws Exception;
void clearAllBind();
}

@ -86,8 +86,66 @@ public class DataServiceImpl implements DataService {
schema = list.get(0);
}
@Override
public OnePage<Map<String, Object>> getData(NSensor sensor, List<ModevTypePoint> points, ConditionModel model) {
public OnePage<Map<String, Object>> getData(NSensor sensor, List<ModevTypePoint> points, ConditionModel model) throws Exception {
if (model.getNumPerDay() != null && model.getNumPerDay() > 0) {
OnePage<Map<String, Object>> page;
long totalDays = 0;
// 需要抽取数据
if (model.getPageNum() != null || model.getPageSize() != null) {
// 当前一页
int dayPerPage = model.getPageSize() / model.getNumPerDay();
if (dayPerPage < 1) {
dayPerPage = 1;
}
// 处理开始和结束时间
Date end = model.getEndTime();
if (end == null) {
end = new Date();
}
end = DateUtil.addDay(end, 1);
end = DateUtil.getDayZero(end);
model.setEndTime(end);
if (model.getStartTime() != null) {
totalDays = DateUtil.getDifferenceInDays(model.getStartTime(), model.getEndTime());
}
if (model.getPageNum() > 1) {
int p = model.getPageNum() - 1;
end = DateUtil.addDay(end, -dayPerPage * p);
}
model.setEndTime(end);
Date start = DateUtil.addDay(end, -dayPerPage);
if (model.getStartTime() == null || start.compareTo(model.getStartTime()) > 0) {
model.setStartTime(start);
}
page = this.doSqlData(sensor, points, model);
page.setTotal(totalDays * model.getNumPerDay());
} else {
// 全量
page = this.doSqlData(sensor, points, model);
}
// 从数据里每天抽取num条
List<Map<String, Object>> content = DataUtil.pickNumPerDay(page.getContent(), model.getNumPerDay());
page.setContent(content);
page.setPageNum(model.getPageNum());
page.setPageSize(content.size());
return page;
} else {
// 不抽取数据
OnePage<Map<String, Object>> page = this.doSqlData(sensor, points, model);
return page;
}
}
private OnePage<Map<String, Object>> doSqlData(NSensor sensor, List<ModevTypePoint> points, ConditionModel model) {
String devField = DataTable.getDevidField(sensor.getTableName());
String timeField = DataTable.getTimeField(sensor.getTableName());
OnePage result = new OnePage();
@ -126,54 +184,6 @@ public class DataServiceImpl implements DataService {
return result;
}
@Override
public OnePage<Map<String, Object>> getDataByDate(NSensor sensor, List<ModevTypePoint> points, ConditionModel model, int dayPerPage) throws Exception {
// 处理开始和结束时间
Date end = model.getEndTime();
if (end == null) {
end = new Date();
}
end = DateUtil.addDay(end, 1);
end = DateUtil.getDayZero(end);
model.setEndTime(end);
Date start = model.getStartTime();
if (start == null) {
start = DateUtil.addMonth(new Date(), -1);
}
start = DateUtil.getDayZero(start);
model.setStartTime(start);
long daysBetweenDates = DateUtil.getDifferenceInDays(start, end);
// 本次查询的时间范围
ConditionModel newmodel = new ConditionModel();
if (daysBetweenDates > dayPerPage) {
if (model.getPageNum() > 1) {
int p = model.getPageNum() - 1;
end = DateUtil.addDay(end, -dayPerPage * p);
}
newmodel.setEndTime(end);
start = DateUtil.addDay(end, -dayPerPage);
if (start.compareTo(model.getStartTime()) > 0) {
newmodel.setStartTime(start);
} else {
newmodel.setStartTime(model.getStartTime());
}
}
OnePage<Map<String, Object>> page = this.getData(sensor, points, newmodel);
// 从数据里每天抽取num条
List<Map<String, Object>> content = DataUtil.pickNumPerDay(page.getContent(), model.getNumPerDay());
page.setContent(content);
page.setPageNum(model.getPageNum());
page.setPageSize(model.getPageSize());
page.setTotal(daysBetweenDates * model.getPageSize());
return page;
}
@Override
public void clearAllBind() {
String sql = "UPDATE n_sensor SET icd_id=null";

@ -182,17 +182,8 @@ public class NSensorServiceImpl implements NSensorService {
SensorDetail<Map<String, Object>> result = new SensorDetail();
result.setSensor(sensor);
if (model.getNumPerDay() != null && model.getPageSize() > model.getNumPerDay()) {
// 按每页几天取数据
int dayPerPage = model.getPageSize() / model.getNumPerDay();
OnePage<Map<String, Object>> page = dataService.getDataByDate(sensor, pointList, model, dayPerPage);
result.initFrom(page);
} else {
// 按全量取数据
OnePage<Map<String, Object>> page = dataService.getData(sensor, pointList, model);
result.initFrom(page);
}
OnePage<Map<String, Object>> page = dataService.getData(sensor, pointList, model);
result.initFrom(page);
for (ModevTypePoint point : pointList) {
List<Object> dataList = new ArrayList<>();

Loading…
Cancel
Save