|
@@ -19,6 +19,7 @@ import cn.hutool.core.util.ReUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import com.alibaba.excel.EasyExcel;
|
|
|
import com.alibaba.excel.support.ExcelTypeEnum;
|
|
|
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
@@ -26,6 +27,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.github.jfcloud.influxdb.flux.AggregationWindow;
|
|
|
import com.github.jfcloud.influxdb.flux.QueryCondition;
|
|
|
import jakarta.annotation.Resource;
|
|
|
+import jakarta.servlet.ServletOutputStream;
|
|
|
import jakarta.servlet.http.HttpServletResponse;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
@@ -45,7 +47,6 @@ import vip.xiaonuo.coldchain.core.config.JfcloudRedisCacheService;
|
|
|
import vip.xiaonuo.coldchain.core.renke.RenKeService;
|
|
|
import vip.xiaonuo.coldchain.core.service.JfcloudSensorDataService;
|
|
|
import vip.xiaonuo.coldchain.modular.app.param.AppParametersParam;
|
|
|
-import vip.xiaonuo.coldchain.modular.app.param.MessagePageParam;
|
|
|
import vip.xiaonuo.coldchain.modular.monitordevice.config.CopyOptionsConfig;
|
|
|
import vip.xiaonuo.coldchain.modular.monitordevice.dto.MonitorDevicePageDto;
|
|
|
import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice;
|
|
@@ -103,6 +104,9 @@ public class MonitorDeviceServiceImpl extends ServiceImpl<MonitorDeviceMapper, M
|
|
|
private MonitorTargetService monitorTargetService;
|
|
|
@Resource
|
|
|
JfcloudRedisCacheService jfcloudRedisCacheService;
|
|
|
+ @Resource
|
|
|
+ MonitorDeviceMapper monitorDeviceMapper;
|
|
|
+
|
|
|
private String bucketName;
|
|
|
|
|
|
@Override
|
|
@@ -570,4 +574,40 @@ public class MonitorDeviceServiceImpl extends ServiceImpl<MonitorDeviceMapper, M
|
|
|
return appParametersParam;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void export(HttpServletResponse response) {
|
|
|
+ List<Map<String, Object>> data = getExportData();
|
|
|
+
|
|
|
+ response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
|
|
+ response.setHeader("Content-Disposition", "attachment;filename=device.xlsx");
|
|
|
+
|
|
|
+ try (ServletOutputStream out = response.getOutputStream()) {
|
|
|
+ // 动态生成表头
|
|
|
+ List<List<String>> head = data.isEmpty() ? Collections.emptyList() :
|
|
|
+ data.get(0).keySet().stream()
|
|
|
+ .map(Collections::singletonList)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ // 写入数据
|
|
|
+ EasyExcel.write(out)
|
|
|
+ .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
|
|
|
+ .head(head)
|
|
|
+ .sheet("设备列表")
|
|
|
+ .doWrite(data.stream()
|
|
|
+ .map(map -> new ArrayList<>(map.values()))
|
|
|
+ .collect(Collectors.toList()));
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<Map<String, Object>> getExportData() {
|
|
|
+ List<Map<String, Object>> dataList = monitorDeviceMapper.selectDeviceWithRegion();
|
|
|
+ // 动态处理空值(参考网页1[1](@ref))
|
|
|
+ return dataList.stream().map(map -> {
|
|
|
+ map.replaceAll((k, v) -> v == null ? "" : v);
|
|
|
+ return map;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
}
|