“mitao”
2026-05-15 78e7243f324724160c42d22616c38fd83c714f24
feat:安全检查报告模版
1个文件已添加
4个文件已修改
86 ■■■■■ 已修改文件
admin-server/src/main/java/com/estate/expert/admin/service/impl/ReportServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-server/src/main/java/com/estate/expert/admin/stat/report/builder/SystemReportBuilder.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-server/src/main/java/com/estate/expert/admin/stat/report/data/DaiguanDeviceReportData.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-server/src/main/java/com/estate/expert/admin/stat/report/data/ReportDataBase.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-server/src/main/resources/templates/第三方评估报告new.docx 补丁 | 查看 | 原始文档 | blame | 历史
admin-server/src/main/java/com/estate/expert/admin/service/impl/ReportServiceImpl.java
@@ -48,6 +48,8 @@
@Service
public class ReportServiceImpl implements ReportService {
    private static final String DAIGUAN_TECH_REMARK = "岱观科技";
    private static final String DAIGUAN_SYSTEM_TEMPLATE_FILE = "第三方评估报告new.docx";
    private static final String DAIGUAN_REMARK = "daiguan";
    private static final String DAIGUAN_DEVICE_TEMPLATE_FILE = "设备风险评估报告new.docx";
@@ -192,6 +194,9 @@
        BizResultCode.BIZ_REPORT_TEMPLATE_NOT_EXIST.check(reportTemplate == null);
        switch (reportTemplate.getType()) {
            case ThirdPartyReport:
                if (isDaiguanTechTemplate(reportTemplate)) {
                    return new SystemReportBuilder(userFileService, DAIGUAN_SYSTEM_TEMPLATE_FILE);
                }
                return new SystemReportBuilder(userFileService);
            case DeviceReport:
                if (DAIGUAN_REMARK.equals(reportTemplate.getRemark())) {
@@ -467,6 +472,13 @@
        return reportTemplate != null && DAIGUAN_REMARK.equals(reportTemplate.getRemark());
    }
    private boolean isDaiguanTechTemplate(ReportTemplate reportTemplate) {
        if (reportTemplate == null || reportTemplate.getRemark() == null) {
            return false;
        }
        return DAIGUAN_TECH_REMARK.equals(reportTemplate.getRemark().trim());
    }
    private long countProjectChecks(Integer projectId) {
        if (projectId == null) {
            return 0L;
admin-server/src/main/java/com/estate/expert/admin/stat/report/builder/SystemReportBuilder.java
@@ -13,7 +13,6 @@
import com.estate.expert.admin.stat.report.render.AbstractInfoTablePolicy;
import com.estate.expert.admin.stat.report.render.CheckInfoTablePolicy;
import com.estate.expert.admin.stat.report.render.CustomPictureRenderPolicy;
import lombok.AllArgsConstructor;
import org.springframework.core.io.ClassPathResource;
import org.springframework.util.CollectionUtils;
@@ -24,10 +23,22 @@
/**
 * 第三方评估报告构建器
 */
@AllArgsConstructor
public class SystemReportBuilder implements ReportBuilderBase {
    private static final String DEFAULT_TEMPLATE_FILE = "第三方评估报告.docx";
    protected UserFileService userFileService;
    private final String templateFile;
    public SystemReportBuilder(UserFileService userFileService) {
        this(userFileService, DEFAULT_TEMPLATE_FILE);
    }
    public SystemReportBuilder(UserFileService userFileService, String templateFile) {
        this.userFileService = userFileService;
        this.templateFile = templateFile;
    }
    /**
     * 构建第三方评估报告
@@ -37,7 +48,7 @@
     */
    @Override
    public XWPFTemplate buildReport(JSONObject data, Map<String, Integer> templateConfig) {
        var res = new ClassPathResource("templates/第三方评估报告.docx");
        var res = new ClassPathResource("templates/" + templateFile);
        var viewConfig = templateConfig != null ? toViewConfig(templateConfig) : null;
        var builder = initConfig(viewConfig);
@@ -77,6 +88,7 @@
    private ConfigureBuilder initConfig(Map<String, Boolean> viewConfig){
        ConfigureBuilder builder = Configure.builder();
        builder.bind("data.设备信息", new LoopRowTableRenderPolicy());
        builder.bind("data.设备分组信息", new LoopRowTableRenderPolicy());
        builder.bind("data.评估结果.隐患等级分布.分项", new LoopRowTableRenderPolicy());
        builder.bind("分项评估",  new CheckInfoTablePolicy());
@@ -107,10 +119,15 @@
     * @param dataMap 数据映射
     */
    private void initChart(JSONObject data, Map<String, Object> dataMap){
        var checkCategories = data.getJSONObject("评估结果").getJSONArray("检查项");
        var evalResult = data.getJSONObject("评估结果");
        var checkCategories = evalResult.getJSONArray("检查项");
        if(checkCategories == null) return;
        var safetyCategories = new JSONArray();
        for (var c : checkCategories){
            var co = (JSONObject)c;
            var name = co.getString("名称");
            if(name != null && name.contains("安全"))
                safetyCategories.add(co);
            var pieChart = buildPieChart(co);
            if(pieChart!=null)
                co.put("问题分布饼图", pieChart);
@@ -118,6 +135,9 @@
            if(barChart!=null)
                co.put("问题分布直方图", barChart);
        }
        if(safetyCategories.isEmpty() && !checkCategories.isEmpty())
            safetyCategories.add(checkCategories.get(0));
        evalResult.put("安全检查项", safetyCategories);
    }
    /**
admin-server/src/main/java/com/estate/expert/admin/stat/report/data/DaiguanDeviceReportData.java
@@ -67,7 +67,7 @@
    /**
     * 按设备类型汇总设备信息,供新版设备报告使用。
     */
    private List<Object> buildDeviceGroupInfo() {
    protected List<Object> buildDeviceGroupInfo() {
        Map<String, List<Device>> groupedDevices = devices.stream()
                .sorted(Comparator.comparing(device -> device.getType() != null ? device.getType().ordinal() : Integer.MAX_VALUE))
                .collect(java.util.stream.Collectors.groupingBy(
admin-server/src/main/java/com/estate/expert/admin/stat/report/data/ReportDataBase.java
@@ -16,6 +16,7 @@
import org.springframework.util.StringUtils;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
@@ -45,6 +46,7 @@
        var result = buildReportInfo();
        result.put("工程概况", buildProjectInfo());
        result.put("设备信息", buildDeviceInfo());
        result.put("设备分组信息", buildDeviceGroupInfo());
        result.put("评估结果", buildEvalInfo());
        return result;
    }
@@ -61,9 +63,11 @@
     */
    protected JSONObject buildReportInfo() {
        JSONObject result = new JSONObject();
        var reportDate = LocalDate.now();
        result.put("项目名称", project.getName());
        result.put("报告编号", template.getNumber() + "-" + String.format("%08d", reportId));
        result.put("报告日期", LocalDate.now());
        result.put("报告日期", reportDate);
        result.put("报告日期中文", reportDate.format(DateTimeFormatter.ofPattern("yyyy年M月d日")));
        result.put("公司名称", "四川信立隆第三方评估咨询有限公司");
        return result;
    }
@@ -92,6 +96,40 @@
    }
    /**
     * 按设备类型汇总设备信息,供新版报告模板使用
     * @return 设备分组信息
     */
    protected List<Object> buildDeviceGroupInfo() {
        Map<String, List<Device>> groupedDevices = devices.stream()
                .sorted(Comparator.comparing(device -> device.getType() != null ? device.getType().ordinal() : Integer.MAX_VALUE))
                .collect(Collectors.groupingBy(
                        device -> device.getType() != null ? device.getType().getDesc() : "",
                        LinkedHashMap::new,
                        Collectors.toList()
                ));
        List<Object> groupInfos = new ArrayList<>();
        groupedDevices.forEach((deviceType, groupDevices) -> {
            var deviceNumbers = groupDevices.stream()
                    .map(Device::getManufacturerNumber)
                    .filter(StringUtils::hasText)
                    .collect(Collectors.toList());
            if (deviceNumbers.isEmpty()) {
                deviceNumbers.add("");
            }
            for (int i = 0; i < deviceNumbers.size(); i++) {
                JSONObject groupInfo = new JSONObject();
                groupInfo.put("设备类型", i == 0 ? deviceType : "");
                groupInfo.put("设备数量", i == 0 ? groupDevices.size() : "");
                groupInfo.put("设备编号", deviceNumbers.get(i));
                groupInfos.add(groupInfo);
            }
        });
        return groupInfos;
    }
    /**
     * 构建错误级别
     * @param node 节点
     * @return 错误级别
@@ -114,6 +152,10 @@
            info.put("比例", formatPercent(count * 1.0 / totalErrors));
            errorInfos.add(info);
        }
        result.put("一级隐患数量", node.getData().getTotalErrorCounts()[0]);
        result.put("二级隐患数量", node.getData().getTotalErrorCounts()[1]);
        result.put("三级隐患数量", node.getData().getTotalErrorCounts()[2]);
        result.put("四级隐患数量", node.getData().getTotalErrorCounts()[3]);
        result.put("分项", errorInfos);
        return result;
    }
admin-server/src/main/resources/templates/第三方评估报告new.docx
Binary files differ