From 8f101c80208bf1d5aaa4892bd26102d1f10ff2bd Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期五, 16 十月 2026 14:23:35 +0800
Subject: [PATCH] 修复设备模块导出报 TemplateRenderPolicy render error (500):签名图片缺失时用透明图兜底

---
 cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceScrappedServiceImpl.java               |    8 +-
 cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenancePlanServiceImpl.java        |    4 
 cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceImpl.java                   |    2 
 inspect-server/src/main/java/com/ruoyi/inspect/util/UserUtils.java                                   |   46 +++++++++++++++
 cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceBreakdownMaintenanceServiceImpl.java   |    4 
 cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExaminePlanServiceImpl.java            |    4 
 cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInspectionRecordServiceImpl.java       |    4 
 cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordContrastServiceImpl.java  |    4 
 cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExternalApplyServiceImpl.java          |    8 +-
 cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceImpowerServiceImpl.java                |    2 
 cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordServiceImpl.java          |    4 
 cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAccidentReportServiceImpl.java         |   10 +-
 cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceStateServiceImpl.java                  |   70 ++---------------------
 cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceCalibrationPlanServiceImpl.java        |    4 
 cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceTraceabilityManagementServiceImpl.java |    4 
 15 files changed, 83 insertions(+), 95 deletions(-)

diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAccidentReportServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAccidentReportServiceImpl.java
index 4f4a327..f2b6809 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAccidentReportServiceImpl.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAccidentReportServiceImpl.java
@@ -159,15 +159,15 @@
                     put("deviceAccidentReport", deviceAccidentReport);
                     put("device", finalDevice);
                     // 鎶ュ憡浜虹鍚�
-                    put("reportUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getReportUserId()));
+                    put("reportUserUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceAccidentReport.getReportUserId()));
                     // 璇勪及浜虹鍚�
-                    put("assessorUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getAssessorUserId()));
+                    put("assessorUserUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceAccidentReport.getAssessorUserId()));
                     // 閮ㄩ棬璐熻矗浜虹鍚�
-                    put("departmentHeadUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getDepartmentHeadUserId()));
+                    put("departmentHeadUserUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceAccidentReport.getDepartmentHeadUserId()));
                     // 鎶�鏈礋璐d汉绛惧悕
-                    put("technicalDirectorUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getTechnicalDirectorUserId()));
+                    put("technicalDirectorUserUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceAccidentReport.getTechnicalDirectorUserId()));
                     // 涓讳换绛惧悕
-                    put("directorHeadUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getDepartmentHeadUserId()));
+                    put("directorHeadUserUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceAccidentReport.getDepartmentHeadUserId()));
                 }});
 
         try {
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceBreakdownMaintenanceServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceBreakdownMaintenanceServiceImpl.java
index 24bd8be..c41f0dc 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceBreakdownMaintenanceServiceImpl.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceBreakdownMaintenanceServiceImpl.java
@@ -128,9 +128,9 @@
                     put("deviceBreakdownMaintenance", deviceBreakdownMaintenance);
                     put("device", finalDevice);
                     // 鐢宠浜虹鍚�
-                    put("applicantUrl", UserUtils.getFinalUserSignatureUrl(deviceBreakdownMaintenance.getApplicantUserId()));
+                    put("applicantUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceBreakdownMaintenance.getApplicantUserId()));
                     // 閮ㄩ棬璐熻矗浜虹鍚�
-                    put("headUrl", UserUtils.getFinalUserSignatureUrl(deviceBreakdownMaintenance.getDepartmentHeadUserId()));
+                    put("headUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceBreakdownMaintenance.getDepartmentHeadUserId()));
                 }});
 
         try {
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceCalibrationPlanServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceCalibrationPlanServiceImpl.java
index c119452..9bf98af 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceCalibrationPlanServiceImpl.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceCalibrationPlanServiceImpl.java
@@ -286,9 +286,9 @@
                     put("deviceCalibrationPlan", deviceCalibrationPlanDto);
                     put("deviceCalibrationPlanDetailDtoList", deviceCalibrationPlanDetailDtoList);
                     //鑾峰彇缂栧埗浜虹殑绛惧悕鍦板潃
-                    put("organizationUrl", UserUtils.getFinalUserSignatureUrl(deviceCalibrationPlan.getRatifyUserId()));
+                    put("organizationUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceCalibrationPlan.getRatifyUserId()));
                     //鑾峰彇鎵瑰噯浜虹殑绛惧悕鍦板潃
-                    put("approvedUrl", UserUtils.getFinalUserSignatureUrl(deviceCalibrationPlan.getWriteUserId()));
+                    put("approvedUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceCalibrationPlan.getWriteUserId()));
                 }});
 
         try {
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExaminePlanServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExaminePlanServiceImpl.java
index 4a4d45b..30df898 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExaminePlanServiceImpl.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExaminePlanServiceImpl.java
@@ -289,9 +289,9 @@
                     put("deviceExaminePlan", deviceExaminePlanDto);
                     put("deviceExaminePlanDetailsDtoList", deviceExaminePlanDetailsDtoList);
                     //鑾峰彇鏍告煡浜虹殑绛惧悕鍦板潃
-                    put("writeUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExaminePlanDto.getWriteUserId()));
+                    put("writeUserUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceExaminePlanDto.getWriteUserId()));
                     //鑾峰彇瀹℃煡浜虹殑绛惧悕鍦板潃
-                    put("reviewUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExaminePlanDto.getRatifyUserId()));
+                    put("reviewUserUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceExaminePlanDto.getRatifyUserId()));
                 }});
 
         try {
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordContrastServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordContrastServiceImpl.java
index 193ab7a..5884953 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordContrastServiceImpl.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordContrastServiceImpl.java
@@ -170,9 +170,9 @@
                     put("deviceExamineRecordContrast", deviceExamineRecordContrast);
                     put("deviceExamineRecordContrastDetailsDtoList", deviceExamineRecordContrastDetailsDtoList);
                     //鑾峰彇鏍告煡浜虹殑绛惧悕鍦板潃
-                    put("checkerUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExamineRecordContrast.getCheckerUserId()));
+                    put("checkerUserUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceExamineRecordContrast.getCheckerUserId()));
                     //鑾峰彇瀹℃煡浜虹殑绛惧悕鍦板潃
-                    put("reviewUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExamineRecordContrast.getReviewUserId()));
+                    put("reviewUserUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceExamineRecordContrast.getReviewUserId()));
                 }});
 
         try {
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordServiceImpl.java
index 790f995..cdb33d0 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordServiceImpl.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExamineRecordServiceImpl.java
@@ -213,9 +213,9 @@
                     put("deviceExamineRecordDto", deviceExamineRecordDto);
                     put("deviceExamineRecordDetailList", deviceExamineRecordDetailList);
                     //鑾峰彇鏍告煡浜虹殑绛惧悕鍦板潃
-                    put("checkerUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExamineRecordDto.getCheckerUserId()));
+                    put("checkerUserUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceExamineRecordDto.getCheckerUserId()));
                     //鑾峰彇瀹℃煡浜虹殑绛惧悕鍦板潃
-                    put("reviewUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExamineRecordDto.getReviewUserId()));
+                    put("reviewUserUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceExamineRecordDto.getReviewUserId()));
                 }});
 
         try {
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExternalApplyServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExternalApplyServiceImpl.java
index 6129e7c..394f24e 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExternalApplyServiceImpl.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceExternalApplyServiceImpl.java
@@ -134,13 +134,13 @@
                 new HashMap<String, Object>() {{
                     put("deviceAccidentReport", deviceAccidentReport);
                     // 鐢宠浜虹鍚�
-                    put("applicantUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getApplicantUserId()));
+                    put("applicantUserUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceAccidentReport.getApplicantUserId()));
                     // 閮ㄩ棬璐熻矗浜虹鍚�
-                    put("departmentHeadUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getDepartmentHeadUserId()));
+                    put("departmentHeadUserUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceAccidentReport.getDepartmentHeadUserId()));
                     // 璁¢噺瀹や汉绛惧悕
-                    put("meteringRoomUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getMeteringRoomUserId()));
+                    put("meteringRoomUserUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceAccidentReport.getMeteringRoomUserId()));
                     // 鎵瑰噯浜虹鍚�
-                    put("approverUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getApproverUserId()));
+                    put("approverUserUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceAccidentReport.getApproverUserId()));
                 }});
 
         try {
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceImpowerServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceImpowerServiceImpl.java
index ae3b60d..fd39bf7 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceImpowerServiceImpl.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceImpowerServiceImpl.java
@@ -277,7 +277,7 @@
                     put("deviceImpower", deviceImpowerDto);
                     put("deviceImpowerDetailsDtoList", deviceImpowerDetailsDtoList);
                     // 鎺堟潈浜哄湴鍧�
-                    put("auditUrl", UserUtils.getFinalUserSignatureUrl(deviceImpower.getAuditId()));
+                    put("auditUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceImpower.getAuditId()));
                 }});
 
         try {
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInspectionRecordServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInspectionRecordServiceImpl.java
index ea2697b..e62dcae 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInspectionRecordServiceImpl.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInspectionRecordServiceImpl.java
@@ -201,8 +201,8 @@
                     put("deviceInspectionRecord", deviceInspectionRecordDto);
                     put("deviceInspectionRecordDetailsList", deviceInspectionRecordDetailsList);
                     put("device", device);
-                    put("recorderUrl", UserUtils.getFinalUserSignatureUrl(deviceInspectionRecordDto.getRecorderId()));
-                    put("reviewerUrl", UserUtils.getFinalUserSignatureUrl(deviceInspectionRecordDto.getReviewerId()));
+                    put("recorderUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceInspectionRecordDto.getRecorderId()));
+                    put("reviewerUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceInspectionRecordDto.getReviewerId()));
                 }});
 
         try {
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceImpl.java
index 82fb4c0..22b2895 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceImpl.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceImpl.java
@@ -109,7 +109,7 @@
             }
             deviceMaintenance.setMaintenanceContent(maintenanceContent.toString());
             // 娣诲姞缁存姢浜哄浘鐗�
-            deviceMaintenance.setMaintenanceUserUrlRender(UserUtils.getFinalUserSignatureUrl(deviceMaintenance.getMaintenanceUserId()));
+            deviceMaintenance.setMaintenanceUserUrlRender(UserUtils.getFinalUserSignatureOrTransparent(deviceMaintenance.getMaintenanceUserId()));
 
         }
 
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenancePlanServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenancePlanServiceImpl.java
index 81c5582..2a067e0 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenancePlanServiceImpl.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenancePlanServiceImpl.java
@@ -181,9 +181,9 @@
                     put("deviceMaintenancePlan", deviceMaintenancePlan);
                     put("deviceMaintenancePlanDetailsDtoList", deviceMaintenancePlanDetailsDtoList);
                     // 缂栧埗浜虹鍚嶅湴鍧�
-                    put("compilerUrl", UserUtils.getFinalUserSignatureUrl(deviceMaintenancePlan.getCompilerId()));
+                    put("compilerUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceMaintenancePlan.getCompilerId()));
                     // 瀹℃牳浜虹鍚嶅湴鍧�
-                    put("auditUrl", UserUtils.getFinalUserSignatureUrl(deviceMaintenancePlan.getAuditId()));
+                    put("auditUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceMaintenancePlan.getAuditId()));
                 }});
 
         try {
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceScrappedServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceScrappedServiceImpl.java
index af0f4fe..1e36655 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceScrappedServiceImpl.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceScrappedServiceImpl.java
@@ -150,13 +150,13 @@
                     put("deviceScrapped", deviceScrapped);
                     put("device", finalDevice);
                     // 鐢宠浜虹鍚�
-                    put("applicantUrl", UserUtils.getFinalUserSignatureUrl(deviceScrapped.getApplicantUserId()));
+                    put("applicantUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceScrapped.getApplicantUserId()));
                     // 閮ㄩ棬璐熻矗浜虹鍚�
-                    put("headUrl", UserUtils.getFinalUserSignatureUrl(deviceScrapped.getDepartmentHeadUserId()));
+                    put("headUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceScrapped.getDepartmentHeadUserId()));
                     // 璁¢噺瀹ょ鍚�
-                    put("metrologyRoomUrl", UserUtils.getFinalUserSignatureUrl(deviceScrapped.getMeteringRoomUserId()));
+                    put("metrologyRoomUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceScrapped.getMeteringRoomUserId()));
                     // 鎵瑰噯浜虹鍚�
-                    put("approverUrl", UserUtils.getFinalUserSignatureUrl(deviceScrapped.getApproverUserId()));
+                    put("approverUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceScrapped.getApproverUserId()));
                 }});
 
         try {
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceStateServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceStateServiceImpl.java
index e45aaed..e2acac2 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceStateServiceImpl.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceStateServiceImpl.java
@@ -7,17 +7,13 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.deepoove.poi.XWPFTemplate;
 import com.deepoove.poi.config.Configure;
-import com.deepoove.poi.data.Pictures;
 import com.ruoyi.basic.mapper.LaboratoryMapper;
 import com.ruoyi.basic.pojo.Laboratory;
-import com.ruoyi.common.core.domain.entity.User;
 import com.ruoyi.device.dto.DeviceStateDto;
 import com.ruoyi.device.mapper.DeviceStateMapper;
 import com.ruoyi.device.pojo.DeviceState;
 import com.ruoyi.device.service.DeviceStateService;
-import com.ruoyi.framework.exception.ErrorException;
-import com.ruoyi.system.mapper.UserMapper;
-import org.springframework.beans.factory.annotation.Value;
+import com.ruoyi.inspect.util.UserUtils;
 import org.springframework.stereotype.Service;
 
 import jakarta.annotation.Resource;
@@ -41,12 +37,6 @@
 
     @Resource
     private LaboratoryMapper laboratoryMapper;
-
-    @Resource
-    private UserMapper userMapper;
-
-    @Value("${file.path}")
-    private String imgUrl;
 
     @Override
     public IPage<DeviceStateDto> getDeviceStatePage(Integer deviceId, Page page, String processNumber) {
@@ -78,66 +68,18 @@
             laboratoryName = "";
         }
 
-        //todo: 璁惧鐘舵�佹煡璇㈢鍚嶅湴鍧� 鏆傛椂浜哄悕鏌ヨ
-        //鑾峰彇鐢宠浜虹殑绛惧悕鍦板潃
-        String applicantUrl = null;
-        if (deviceStateDto.getSubmitOperatingPersonnel() != null) {
-            applicantUrl = userMapper.selectOne(Wrappers.<User>lambdaQuery()
-                            .eq(User::getName, deviceStateDto.getSubmitOperatingPersonnel()))
-                    .getSignatureUrl();
-            if (StringUtils.isBlank(applicantUrl)) {
-                throw new ErrorException("鎵句笉鍒扮敵璇蜂汉鐨勭鍚�");
-            }
-        }
-
-        //鑾峰彇閮ㄩ棬璐熻矗浜虹殑绛惧悕鍦板潃
-        String headOfDepartmentUrl = null;
-        if (deviceStateDto.getDepartmentNextPesponsible() != null) {
-            headOfDepartmentUrl = userMapper.selectOne(Wrappers.<User>lambdaQuery()
-                    .eq(User::getName, deviceStateDto.getDepartmentNextPesponsible()))
-                    .getSignatureUrl();
-            if (StringUtils.isBlank(headOfDepartmentUrl)) {
-                throw new ErrorException("鎵句笉鍒伴儴闂ㄨ礋璐d汉鐨勭鍚�");
-            }
-        }
-
-        //鑾峰彇璁¢噺瀹ゅ娴嬩汉鐨勭鍚嶅湴鍧�
-        String measurementRoomUrl = null;
-        if (deviceStateDto.getMeasuringRoomNextPesponsible() != null) {
-            measurementRoomUrl = userMapper.selectOne(Wrappers.<User>lambdaQuery()
-                            .eq(User::getName, deviceStateDto.getMeasuringRoomNextPesponsible()))
-                    .getSignatureUrl();
-            if (StringUtils.isBlank(measurementRoomUrl)) {
-                throw new ErrorException("鎵句笉鍒拌閲忓澶嶆祴浜虹殑绛惧悕");
-            }
-        }
-
-        //鑾峰彇鎵瑰噯浜虹殑绛惧悕鍦板潃
-        String approvedUrl = null;
-        if (deviceStateDto.getApprovalNextPesponsible() != null) {
-            approvedUrl = userMapper.selectOne(Wrappers.<User>lambdaQuery()
-                            .eq(User::getName, deviceStateDto.getApprovalNextPesponsible()))
-                    .getSignatureUrl();
-            if (StringUtils.isBlank(approvedUrl)) {
-                throw new ErrorException("鎵句笉鍒版壒鍑嗕汉鐨勭鍚�");
-            }
-        }
-
         // 鑾峰彇璺緞
         InputStream inputStream = this.getClass().getResourceAsStream("/static/word/device-status.docx");
         Configure configure = Configure.builder()
                 .build();
-        String finalApplicantUrl = applicantUrl; // 鐢宠浜虹殑绛惧悕鍦板潃
-        String finalHeadOfDepartmentUrl = headOfDepartmentUrl; // 閮ㄩ棬璐熻矗浜虹殑绛惧悕鍦板潃
-        String finalMeasurementRoomUrl = measurementRoomUrl; // 璁¢噺瀹ゅ娴嬩汉鐨勭鍚嶅湴鍧�
-        String finalApprovedUrl = approvedUrl; // 鎵瑰噯浜虹殑绛惧悕鍦板潃
         XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                 new HashMap<String, Object>() {{
                     put("deviceStateDto", deviceStateDto);
-                    put("submitOperatingPersonnelUrl", StringUtils.isNotBlank(finalApplicantUrl) ? Pictures.ofLocal(imgUrl + "/" + finalApplicantUrl).create() : null);
-                    put("departmentNextPesponsibleUrl", StringUtils.isNotBlank(finalHeadOfDepartmentUrl) ? Pictures.ofLocal(imgUrl + "/" + finalHeadOfDepartmentUrl).create() : null);
-                    put("measuringRoomNextPesponsibleUrl", StringUtils.isNotBlank(finalMeasurementRoomUrl) ? Pictures.ofLocal(imgUrl + "/" + finalMeasurementRoomUrl).create() : null);
-                    put("approvalNextPesponsibleUrl", StringUtils.isNotBlank(finalApprovedUrl) ? Pictures.ofLocal(imgUrl + "/" + finalApprovedUrl).create() : null);
+                    // 绛惧悕鍏滃簳: 浜哄憳鏈厤缃鍚嶆垨绛惧悕鏂囦欢缂哄け鏃惰繑鍥為�忔槑鍥剧墖, 淇濊瘉瀵煎嚭涓嶅洜绌哄浘鐗囨姤閿�
+                    put("submitOperatingPersonnelUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceStateDto.getSubmitOperatingPersonnel()));
+                    put("departmentNextPesponsibleUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceStateDto.getDepartmentNextPesponsible()));
+                    put("measuringRoomNextPesponsibleUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceStateDto.getMeasuringRoomNextPesponsible()));
+                    put("approvalNextPesponsibleUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceStateDto.getApprovalNextPesponsible()));
                     put("laboratory", laboratoryName);
                 }});
 
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceTraceabilityManagementServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceTraceabilityManagementServiceImpl.java
index 4cba9bd..7231c78 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceTraceabilityManagementServiceImpl.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceTraceabilityManagementServiceImpl.java
@@ -265,9 +265,9 @@
                     put("deviceTraceabilityManagement", deviceTraceabilityManagement);
                     put("deviceTraceabilityManagementDetailsDtoList", deviceTraceabilityManagementDetailsDtoList);
                     // 缂栧埗浜虹鍚嶅湴鍧�
-                    put("compilerUrl", UserUtils.getFinalUserSignatureUrl(deviceTraceabilityManagement.getCompilerId()));
+                    put("compilerUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceTraceabilityManagement.getCompilerId()));
                     // 瀹℃牳浜虹鍚嶅湴鍧�
-                    put("auditUrl", UserUtils.getFinalUserSignatureUrl(deviceTraceabilityManagement.getAuditId()));
+                    put("auditUrl", UserUtils.getFinalUserSignatureOrTransparent(deviceTraceabilityManagement.getAuditId()));
                 }});
 
         try {
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/util/UserUtils.java b/inspect-server/src/main/java/com/ruoyi/inspect/util/UserUtils.java
index 4ea9c59..c6d3d03 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/util/UserUtils.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/util/UserUtils.java
@@ -11,6 +11,8 @@
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
+import java.util.Base64;
+
 /**
  * Author: yuan
  * Date: 2024-12-17 鏄熸湡浜� 10:35:50
@@ -87,4 +89,48 @@
         }
         return StringUtils.isNotBlank(userSignatureUrl) ? Pictures.ofLocal(imgUrl + "/" + userSignatureUrl).create() : null;
     }
+
+    /**
+     * 鍏ㄩ�忔槑 1x1 PNG, 绛惧悕鏈厤缃�/绛惧悕鏂囦欢缂哄け鏃剁殑鍏滃簳鍥剧墖
+     */
+    private static final byte[] TRANSPARENT_PNG = Base64.getDecoder().decode(
+            "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAANSURBVBhXY2BgYGAAAAAFAAGKM+MAAAAAAElFTkSuQmCC");
+
+    /**
+     * 鍥剧墖鍊煎厹搴�: null 鎴栨湰鍦板浘鐗囪鍙栧け璐�(濡傜鍚嶆枃浠剁己澶�)鏃惰繑鍥為�忔槑鍥剧墖
+     */
+    public static PictureRenderData orTransparentPicture(PictureRenderData picture) {
+        if (picture != null) {
+            try {
+                byte[] data = picture.readPictureData();
+                if (data != null && data.length > 0) {
+                    return picture;
+                }
+            } catch (Exception ignored) {
+            }
+        }
+        return Pictures.ofBytes(TRANSPARENT_PNG).create();
+    }
+
+    /**
+     * 娓叉煋Word鐢ㄦ埛绛惧悕瀵硅薄(鎸変汉鍛榠d, 甯﹀厹搴�): 浜哄憳涓嶅瓨鍦ㄦ垨绛惧悕鏈厤缃�/鏂囦欢缂哄け鏃惰繑鍥為�忔槑鍥剧墖, 涓嶆姏閿�
+     */
+    public static PictureRenderData getFinalUserSignatureOrTransparent(Integer userId) {
+        try {
+            return orTransparentPicture(getFinalUserSignatureUrl(userId));
+        } catch (Exception e) {
+            return Pictures.ofBytes(TRANSPARENT_PNG).create();
+        }
+    }
+
+    /**
+     * 娓叉煋Word鐢ㄦ埛绛惧悕瀵硅薄(鎸変汉鍛樺鍚�, 甯﹀厹搴�): 浜哄憳涓嶅瓨鍦ㄦ垨绛惧悕鏈厤缃�/鏂囦欢缂哄け鏃惰繑鍥為�忔槑鍥剧墖, 涓嶆姏閿�
+     */
+    public static PictureRenderData getFinalUserSignatureOrTransparent(String userName) {
+        try {
+            return orTransparentPicture(getFinalUserSignatureUrl(userName));
+        } catch (Exception e) {
+            return Pictures.ofBytes(TRANSPARENT_PNG).create();
+        }
+    }
 }

--
Gitblit v1.9.3