liujie
2026-01-21 8d1d546ad729da0e809e17e8161376adcc662c96
update代码合并
1个文件已添加
16个文件已修改
268 ■■■■■ 已修改文件
admin-server/src/main/java/com/estate/expert/admin/controller/admin/ClientController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-server/src/main/java/com/estate/expert/admin/domain/business/device/Device.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-server/src/main/java/com/estate/expert/admin/domain/business/device/DeviceDto.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-server/src/main/java/com/estate/expert/admin/domain/exam/eval/formatter/impl/DeviceFuzzySummaryResultFormatter.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-server/src/main/java/com/estate/expert/admin/domain/exam/eval/formatter/impl/DeviceScoreResultSummaryFormatter.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-server/src/main/java/com/estate/expert/admin/io/processor/impl/business/DeviceProcessor.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-server/src/main/java/com/estate/expert/admin/service/impl/CheckTaskServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-server/src/main/java/com/estate/expert/admin/stat/report/builder/DeviceReportBuilder.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-server/src/main/java/com/estate/expert/admin/stat/report/data/DeviceReportData.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-server/src/main/java/com/estate/expert/admin/stat/report/data/ReportDataBase.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-server/src/main/java/com/estate/expert/admin/stat/report/data/SystemReportData.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-server/src/main/java/com/estate/expert/admin/stat/report/render/CheckInfoTablePolicy.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-server/src/main/java/com/estate/expert/admin/stat/report/render/DeviceInfoTablePolicy.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-server/src/main/java/com/estate/expert/admin/stat/report/render/DeviceTablePolicy.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-server/src/main/java/com/estate/expert/admin/stat/report/render/RenderHelper.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-server/src/main/resources/templates/设备风险评估报告.docx 补丁 | 查看 | 原始文档 | blame | 历史
admin-server/src/test/java/com/estate/expert/admin/service/ReportServiceTest.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-server/src/main/java/com/estate/expert/admin/controller/admin/ClientController.java
@@ -1,5 +1,6 @@
package com.estate.expert.admin.controller.admin;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.estate.expert.admin.domain.business.client.ClientDto;
import com.estate.expert.admin.domain.business.client.clientparam.ClientParam;
import com.estate.expert.admin.domain.report.ReportTemplate;
@@ -79,6 +80,15 @@
        return Result.success();
    }
    @ApiOperation(value = "委托方获取参数",response = ClientParam.class)
    @GetMapping("/getParam")
    public Result getParam(@RequestParam Integer clientId) {
        ClientParam clientParam = clientParamService.getOne(new LambdaQueryWrapper<ClientParam>().eq(ClientParam::getClientId, clientId).last("limit 1"));
        return Result.success(clientParam);
    }
    @ApiOperation(value = "委托方获取模板",response = ReportTemplate.class)
    @PostMapping("/getTemplate")
    public Result getTemplate(@ApiParam(value = "模板类型0安全 1设备") @RequestParam(value = "type") Integer type) {
admin-server/src/main/java/com/estate/expert/admin/domain/business/device/Device.java
@@ -11,10 +11,10 @@
import java.util.Map;
/**
 *
 *
 * @TableName device 设备管理
 *
 * 编号(对应name)
 * 出厂编号(对应name)
 */
@Getter
@Setter
@@ -28,7 +28,7 @@
    private DeviceType type;
    /**
     * 出厂编号
     * 设备编号
     */
    @Column(nullable = false)
    private String manufacturerNumber;
@@ -55,6 +55,6 @@
    @Override
    public String getOptionName() {
//        return String.format("%s - %s", getName(), type.getDesc());
        return getName();
        return getManufacturerNumber();
    }
}
admin-server/src/main/java/com/estate/expert/admin/domain/business/device/DeviceDto.java
@@ -28,12 +28,12 @@
    @NotNull(message = "设备类型不能为空")
    DeviceType type;
    @ApiModelProperty("设备编号")
    @NotBlank(message = "设备编号不能为空")
    String name;
    @ApiModelProperty("出厂编号")
    @NotBlank(message = "出厂编号不能为空")
    String name;
    @ApiModelProperty("设备编号")
    @NotBlank(message = "设备编号不能为空")
    String manufacturerNumber;
    @ApiModelProperty("设备是否正在使用中")
admin-server/src/main/java/com/estate/expert/admin/domain/exam/eval/formatter/impl/DeviceFuzzySummaryResultFormatter.java
@@ -83,7 +83,7 @@
        var data = result.root().getData();
        var map = new HashMap<String, Object>();
        map.put("设备编号", device.getName());
        map.put("设备编号", device.getManufacturerNumber());
        map.put("设备类型", device.getType().getDesc());
        map.put("风险等级", data.getRiskLevel().getDesc());
@@ -103,7 +103,7 @@
        var detailData = new FuzzyResultFormatter().format(result);
        map.put("详情", detailData);
        map.put("path", "__DEVICE__"+device.getName());
        map.put("path", "__DEVICE__"+device.getManufacturerNumber());
        return map;
    }
}
admin-server/src/main/java/com/estate/expert/admin/domain/exam/eval/formatter/impl/DeviceScoreResultSummaryFormatter.java
@@ -98,7 +98,7 @@
        var data = result.root().getData();
        var map = new HashMap<String, Object>();
        map.put("设备编号", device.getName());
        map.put("设备编号", device.getManufacturerNumber());
        map.put("单台设备评分", formatFloat(data.getScore()));
        // 展示特定的层级
@@ -107,7 +107,7 @@
            node.setPath(device.getId() + node.getPath());
        });
        map.put("children", newTree.getChildren());
        map.put("path", "__DEVICE__"+device.getName());
        map.put("path", "__DEVICE__"+device.getManufacturerNumber());
        return map;
    }
admin-server/src/main/java/com/estate/expert/admin/io/processor/impl/business/DeviceProcessor.java
@@ -10,14 +10,14 @@
/**
 * 设备处理器
 *
 *
 * 用于处理设备信息的读取和写入
 */
public class DeviceProcessor extends RowDataProcessorBase<Device> {
    /**
     * 获取表头
     *
     *
     * @return 表头
     */
    protected final String[] getHeaders() {
@@ -34,10 +34,10 @@
    protected List<String> buildRowData(Device data) {
        return List.of(
                data.getType().getDesc(),
                data.getName(),
                data.getManufacturerNumber(),
                getProp(data, "设备型号"),
                getProp(data, "设备出厂日期"),
                data.getManufacturerNumber(),
                data.getName(),
                getProp(data, "报废年限"),
                getProp(data, "使用单位"),
                getProp(data, "工程起重机械生产单位"),
@@ -64,7 +64,7 @@
    protected Device parseRowData(int rowIndex, List<String> rowData) {
        var index = 0;
        var device = new Device();
        // 初始化 properties Map
        device.setProperties(new HashMap<>());
@@ -76,12 +76,12 @@
        if(model != null) {
            device.getProperties().put("设备型号", model);
        }
        String manufactureDate = ExcelParseUtils.parseString(rowData.get(index++));
        if(manufactureDate != null) {
            device.getProperties().put("设备出厂日期", manufactureDate);
        }
        device.setManufacturerNumber(ExcelParseUtils.parseString(rowData.get(index++)));
        var headers = getHeaders();
admin-server/src/main/java/com/estate/expert/admin/service/impl/CheckTaskServiceImpl.java
@@ -197,7 +197,7 @@
        BizResultCode.TASK_ALREADY_EXIST.check(task != null);
        BizResultCode.DRIVER_CAR_NOT_MATCH.check(
                entity.getDrivers() != null && entity.getCars() != null
                && entity.getDrivers().size() != entity.getCars().size());
                        && entity.getDrivers().size() != entity.getCars().size());
        entity.setState(CheckTaskState.Published);
        entity.setName(UUID.randomUUID().toString());
        return super.add(creator, entity);
@@ -206,9 +206,9 @@
    @Override
    public CheckTask edit(CheckTask entity) {
        BizResultCode.TASK_STATUS_ERROR.check(entity.getState() != CheckTaskState.Init
                    && entity.getState() != CheckTaskState.Rejected
                    && entity.getState() != CheckTaskState.EXECUTING
                    && entity.getState() != CheckTaskState.Published);
                && entity.getState() != CheckTaskState.Rejected
                && entity.getState() != CheckTaskState.EXECUTING
                && entity.getState() != CheckTaskState.Published);
        return super.edit(entity);
    }
@@ -391,7 +391,7 @@
            var device = deviceUsage.getDevice();
            var dt = buildDeviceHierarchyTree(modelTree, records, device);
            dt.setId(device.getId());
            dt.setName(device.getName());
            dt.setName(device.getManufacturerNumber());
            treeRoot.addChild(dt);
        });
        return treeRoot;
admin-server/src/main/java/com/estate/expert/admin/stat/report/builder/DeviceReportBuilder.java
@@ -48,6 +48,7 @@
        builder.bind("data.评估结果.隐患等级分布汇总.分项", new LoopRowTableRenderPolicy());
        builder.bind("分项隐患", new LoopRowTableRenderPolicy());
        builder.bind("分项问题", new DeviceTablePolicy());
//        builder.bind("data.设备信息", new DeviceInfoTablePolicy());
        builder.addPlugin('%', new CustomPictureRenderPolicy(userFileService));
admin-server/src/main/java/com/estate/expert/admin/stat/report/data/DeviceReportData.java
@@ -14,6 +14,7 @@
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
@@ -195,7 +196,7 @@
        List<Object> result = new ArrayList<>();
        JSONObject info = new JSONObject();
        info.put("设备编号", device.getName());
        info.put("设备编号", device.getManufacturerNumber());
        var errorCounts = deviceRes.root().getData().getTotalErrorCounts();
        info.put("一级隐患", errorCounts[0]);
@@ -220,7 +221,7 @@
        List<Object> result = new ArrayList<>();
        JSONObject info = new JSONObject();
        info.put("设备编号", device.getName());
        info.put("设备编号", device.getManufacturerNumber());
        info.put("问题", buildDeviceErrorInfo(device));
        result.add(info);
@@ -254,7 +255,10 @@
     * @return 设备记录
     */
    private List<ErrorRecord> buildDeviceRecords(Device device){
        return records.stream().filter(r -> r.getDevice().getId().equals(device.getId())).toList();
        return records.stream()
                .filter(r -> r.getDevice().getId().equals(device.getId()))
                .sorted(Comparator.comparing(r -> r.getLevel() != null ? r.getLevel().ordinal() : ErrorLevel.P4.ordinal()))
                .toList();
    }
admin-server/src/main/java/com/estate/expert/admin/stat/report/data/ReportDataBase.java
@@ -74,10 +74,14 @@
     */
    protected List<Object> buildDeviceInfo() {
        List<Object> deviceInfos = new ArrayList<>();
        for (var device : devices) {
        // 按照设备类型排序
        var sortedDevices = devices.stream()
                .sorted(Comparator.comparing(device -> device.getType() != null ? device.getType().ordinal() : Integer.MAX_VALUE))
                .collect(Collectors.toList());
        for (var device : sortedDevices) {
            JSONObject deviceInfo = new JSONObject();
            deviceInfo.put("设备类型", device.getType().getDesc());
            deviceInfo.put("设备编号", device.getName());
            deviceInfo.put("设备编号", device.getManufacturerNumber());
            deviceInfo.put("设备租赁单位", device.getProperties().get("工程起重机械租赁单位"));
            deviceInfo.put("设备使用单位", device.getProperties().get("使用单位"));
            deviceInfo.put("安拆单位", device.getProperties().get("工程起重机械安拆单位"));
@@ -100,7 +104,7 @@
        int totalErrors = Arrays.stream(node.getData().getTotalErrorCounts()).sum();
        result.put("隐患数量", totalErrors);
        List<Object> errorInfos = new ArrayList<>();
        for (int i = 3; i>=0 ; i--) {
        for (int i = 0; i<4 ; i++) {
            var level = ErrorLevel.values()[i];
            var count = node.getData().getTotalErrorCounts()[i];
            var info = new JSONObject();
@@ -181,7 +185,7 @@
        var problem = record.getProblem();
        JSONObject subItem = new JSONObject();
        if(record.getDevice() != null)
            subItem.put("设备编号", record.getDevice().getName());
            subItem.put("设备编号", record.getDevice().getManufacturerNumber());
        subItem.put("隐患等级", record.getLevel().getDesc());
        subItem.put("问题部位", record.getProblemPart());
        subItem.put("问题备注", trimText(StringUtils.hasText(record.getRemark()) ? record.getRemark() : problem.getDescription()));
@@ -191,13 +195,13 @@
        if(!CollectionUtils.isEmpty(problem.getSpecificTerms())){
            StringBuilder sb = new StringBuilder();
            var terms = CollectionUtils.isEmpty(record.getSpecificTermIndexes())
                ? problem.getSpecificTerms()
                : record.getSpecificTermIndexes().stream()
            var terms = CollectionUtils.isEmpty(record.getSpecificTermIndexes())
                    ? problem.getSpecificTerms()
                    : record.getSpecificTermIndexes().stream()
                    .filter(idx -> idx < problem.getSpecificTerms().size())
                    .map(problem.getSpecificTerms()::get)
                    .collect(Collectors.toList());
            for(int i = 0; i < terms.size(); i++) {
                sb.append(terms.get(i));
                if(i < terms.size() - 1) {
admin-server/src/main/java/com/estate/expert/admin/stat/report/data/SystemReportData.java
@@ -15,6 +15,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
@@ -141,7 +142,7 @@
                    info.put("类别", n.getName());
                    info.put("序号", index.getAndIncrement() + 1);
                    buildNode(info, n);
                    // 从fuzzyNode中获取评价
                    var fuzzyNode = getFuzzyNodeByPath(n.getPath());
                    if(fuzzyNode != null && fuzzyNode.getData() != null && fuzzyNode.getData().getRiskLevel() != null) {
@@ -182,7 +183,7 @@
        var errors = new ArrayList<>();
        // 按 problem.id 去重,相同问题只保留第一个记录
        var nodeRecords = records.stream()
                .filter(record -> record.getProblem() != null &&
                .filter(record -> record.getProblem() != null &&
                        record.getProblem().getHierarchyPath() != null &&
                        record.getProblem().getHierarchyPath().startsWith(suffix))
                .collect(java.util.stream.Collectors.toMap(
@@ -190,8 +191,12 @@
                        record -> record,
                        (existing, replacement) -> existing  // 保留第一个遇到的记录
                ))
                .values();
                .values()
                .stream()
                // 按照record.errorLevel排序
                .sorted(Comparator.comparing(ErrorRecord::getLevel, Comparator.nullsLast(Comparator.naturalOrder())))
                .toList();
        for(var record : nodeRecords){
            var subItem = buildRecordDetail(record);
            subItem.put("项目级别", errorNodeName(record));
admin-server/src/main/java/com/estate/expert/admin/stat/report/render/CheckInfoTablePolicy.java
@@ -1,9 +1,7 @@
package com.estate.expert.admin.stat.report.render;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.deepoove.poi.policy.DynamicTableRenderPolicy;
import com.estate.expert.admin.domain.exam.record.error.ErrorLevel;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.springframework.util.CollectionUtils;
@@ -13,12 +11,6 @@
 * 这里循环渲染表格
 * */
public class CheckInfoTablePolicy extends DynamicTableRenderPolicy {
    private String colorCommon = "000000";
    private String colorP1 = "FF0000";
    // 橙色
    private String colorP2 = "FF8000";
    /**
     * 渲染检查信息表格
@@ -80,17 +72,12 @@
                            var errors = info.getJSONArray("问题");
                            if(!CollectionUtils.isEmpty(errors)){
                                var highLevelColor = highLevelColor(errors);
                                var highLevelColor = RenderHelper.highLevelColor(errors);
                                for(var error : errors){
                                    var e = (JSONObject) error;
                                    var row = table.insertNewTableRow(table.getRows().size());
                                    var textColor = colorCommon;
                                    var errorLevel = e.getString("隐患等级");
                                    if(errorLevel.equals("一级隐患")){
                                        textColor = colorP1;
                                    }else if(errorLevel.equals("二级隐患")){
                                        textColor = colorP2;
                                    }
                                    var textColor = RenderHelper.getErrorLevelColor(errorLevel);
                                    RenderHelper.renderCell(row, info.getString("类别"), highLevelColor);
                                    RenderHelper.renderCell(row, e.getString("问题部位"), textColor);
                                    RenderHelper.renderCell(row, e.getString("问题备注"), textColor);
@@ -114,33 +101,6 @@
        int endRow = table.getRows().size() - 1;
        if(isErrorSummary && endRow > 3){
            RenderHelper.mergeCellsVertically(table, 2, 0);
        }
    }
    /**
     * 获取最高隐患等级颜色
     * @param errorRecords 错误记录
     * @return 最高隐患等级颜色
     */
    private String highLevelColor(JSONArray errorRecords){
        var minLevel = ErrorLevel.P4;
        for(var errorRecord : errorRecords){
            var e = (JSONObject) errorRecord;
            var levelStr = e.getString("隐患等级");
            var level = ErrorLevel.getByDesc(levelStr);
            if(level != null && level.ordinal() < minLevel.ordinal()){
                minLevel = level;
            }
        }
        switch (minLevel){
            case P1:
                return colorP1;
            case P2:
                return colorP2;
            default:
                return colorCommon;
        }
    }
admin-server/src/main/java/com/estate/expert/admin/stat/report/render/DeviceInfoTablePolicy.java
New file
@@ -0,0 +1,46 @@
package com.estate.expert.admin.stat.report.render;
import com.alibaba.fastjson.JSONObject;
import com.deepoove.poi.policy.DynamicTableRenderPolicy;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.springframework.util.CollectionUtils;
import java.util.List;
/**
 * 设备信息表格渲染策略
 */
public class DeviceInfoTablePolicy extends DynamicTableRenderPolicy {
    /**
     * 渲染设备信息表格
     * @param table 表格
     * @param data 数据
     * @throws Exception 异常
     */
    @Override
    public void render(XWPFTable table, Object data) throws Exception {
        if (data == null) {
            return;
        }
        var deviceInfoList = (List<Object>) data;
        if (CollectionUtils.isEmpty(deviceInfoList)) {
            return;
        }
        for (var deviceInfo : deviceInfoList) {
            var info = (JSONObject) deviceInfo;
            var row = table.insertNewTableRow(table.getRows().size() - 3);
            RenderHelper.renderCell(row, "");
            RenderHelper.renderCell(row, info.getString("设备类型"));
            RenderHelper.renderCell(row, "1");
            RenderHelper.renderCell(row, info.getString("设备编号"));
            RenderHelper.renderCell(row, info.getString("设备租赁单位"));
            RenderHelper.renderCell(row, info.getString("设备使用单位"));
            RenderHelper.renderCell(row, info.getString("安拆单位"));
            RenderHelper.renderCell(row, info.getString("检测单位"));
        }
    }
}
admin-server/src/main/java/com/estate/expert/admin/stat/report/render/DeviceTablePolicy.java
@@ -4,6 +4,7 @@
import com.alibaba.fastjson.JSONObject;
import com.deepoove.poi.policy.DynamicTableRenderPolicy;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.springframework.util.CollectionUtils;
/**
 * 设备表格渲染策略
@@ -23,12 +24,17 @@
            var deviceInfo = (JSONObject) d;
            var records = deviceInfo.getJSONArray("问题");
            var name = deviceInfo.getString("设备编号");
            for (var record : records) {
                var info = (JSONObject) record;
                var row = table.insertNewTableRow(table.getRows().size() );
                RenderHelper.renderCell(row, name);
                RenderHelper.renderCell(row, info.getString("检查问题"));
                RenderHelper.renderCell(row, info.getString("隐患等级"));
            if (!CollectionUtils.isEmpty(records)) {
                var highLevelColor = RenderHelper.highLevelColor(records);
                for (var record : records) {
                    var info = (JSONObject) record;
                    var row = table.insertNewTableRow(table.getRows().size());
                    var errorLevel = info.getString("隐患等级");
                    var textColor = RenderHelper.getErrorLevelColor(errorLevel);
                    RenderHelper.renderCell(row, name, highLevelColor);
                    RenderHelper.renderCell(row, info.getString("检查问题"), textColor);
                    RenderHelper.renderCell(row, info.getString("隐患等级"), textColor);
                }
            }
        }
admin-server/src/main/java/com/estate/expert/admin/stat/report/render/RenderHelper.java
@@ -1,6 +1,9 @@
package com.estate.expert.admin.stat.report.render;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.deepoove.poi.util.TableTools;
import com.estate.expert.admin.domain.exam.record.error.ErrorLevel;
import lombok.extern.log4j.Log4j2;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.XWPFTable;
@@ -15,6 +18,11 @@
 */
@Log4j2
public class RenderHelper {
    // 颜色常量
    private static final String COLOR_COMMON = "000000";
    private static final String COLOR_P1 = "FF0000";
    private static final String COLOR_P2 = "FF8000";
    /**
     * 渲染单元格
@@ -124,4 +132,48 @@
            TableTools.mergeCellsVertically(table, col, start, size - 1);
        }
    }
    /**
     * 获取最高隐患等级颜色
     * @param errorRecords 错误记录
     * @return 最高隐患等级颜色
     */
    public static String highLevelColor(JSONArray errorRecords) {
        var minLevel = ErrorLevel.P4;
        for (var errorRecord : errorRecords) {
            var e = (JSONObject) errorRecord;
            var levelStr = e.getString("隐患等级");
            var level = ErrorLevel.getByDesc(levelStr);
            if (level != null && level.ordinal() < minLevel.ordinal()) {
                minLevel = level;
            }
        }
        switch (minLevel) {
            case P1:
                return COLOR_P1;
            case P2:
                return COLOR_P2;
            default:
                return COLOR_COMMON;
        }
    }
    /**
     * 根据隐患等级获取颜色
     * @param errorLevel 隐患等级字符串
     * @return 对应的颜色
     */
    public static String getErrorLevelColor(String errorLevel) {
        if (errorLevel == null) {
            return COLOR_COMMON;
        }
        if (errorLevel.equals("一级隐患")) {
            return COLOR_P1;
        } else if (errorLevel.equals("二级隐患")) {
            return COLOR_P2;
        }
        return COLOR_COMMON;
    }
}
admin-server/src/main/resources/templates/设备风险评估报告.docx
Binary files differ
admin-server/src/test/java/com/estate/expert/admin/service/ReportServiceTest.java
@@ -53,7 +53,7 @@
    @Test
    public void testDeviceReportData() throws IOException {
        var reportData = reportService.fuzzyReportData(1256, 2);
        var reportData = reportService.fuzzyReportData(203, 2);
        var string = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(reportData);
        // write to file
@@ -74,7 +74,7 @@
    @Test
    public void testBuildSystemScoreReport() throws IOException {
        var template = reportService.scoreReport(1256, 1);
        var template = reportService.scoreReport(1435, 1);
        template.writeToFile("/Volumes/Works/tmp/system_score_report.docx");
    }
@@ -86,7 +86,7 @@
    @Test
    public void testBuildDeviceScoreReport() throws IOException {
        var template = reportService.scoreReport(1, 2);
        var template = reportService.scoreReport(1403, 2);
        template.writeToFile("/Volumes/Works/tmp/device_score_report.docx");
    }