|
@@ -11,11 +11,13 @@ import cn.hutool.core.util.StrUtil;
|
|
|
import com.deepoove.poi.data.NumberingFormat;
|
|
|
import com.deepoove.poi.data.NumberingRenderData;
|
|
|
import com.deepoove.poi.data.ParagraphRenderData;
|
|
|
+import com.deepoove.poi.data.PictureType;
|
|
|
import com.deepoove.poi.data.Pictures;
|
|
|
import com.deepoove.poi.data.Texts;
|
|
|
import com.yaoyicloud.constant.enums.ReportType;
|
|
|
import com.yaoyicloud.service.ReportService;
|
|
|
import com.yaoyicloud.template.PlatformCompanyReport;
|
|
|
+import org.apache.commons.collections4.CollectionUtils;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
@@ -61,62 +63,82 @@ public class ReportServiceImpl implements ReportService {
|
|
|
}
|
|
|
|
|
|
String socialSecurityDetailsLink = (String) data.get("socialSecurityDetailsLink");
|
|
|
- data.put("socialSecurityDetailsLink", Texts.of(socialSecurityDetailsLink).link(socialSecurityDetailsLink).create());
|
|
|
+ data.put("socialSecurityDetailsLink",
|
|
|
+ Texts.of(socialSecurityDetailsLink).link(socialSecurityDetailsLink).create());
|
|
|
|
|
|
String taxDeclarationImage = (String) data.get("taxDeclarationImage");
|
|
|
data.put("taxDeclarationImage", Texts.of(taxDeclarationImage).link(taxDeclarationImage).create());
|
|
|
|
|
|
String financialInfoLink = (String) data.get("financialInfoLink");
|
|
|
data.put("financialInfoLink", Texts.of(financialInfoLink).link(financialInfoLink).create());
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
List<ParagraphRenderData> paragraphImages = new ArrayList<>();
|
|
|
- List<Map<String, Object>> relatedEntitiesImage = (List<Map<String, Object>>) data.get("relatedEntitiesImage");
|
|
|
- for (Map<String, Object> relatedEntity : relatedEntitiesImage) {
|
|
|
- ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
|
|
|
- paragraphRenderData.addPicture(Pictures.of((String) relatedEntity.get("url"))
|
|
|
- .size((Integer) relatedEntity.get("width"), (Integer) relatedEntity.get("height")).create());
|
|
|
- paragraphImages.add(paragraphRenderData);
|
|
|
- }
|
|
|
- NumberingFormat numberingFormat = new NumberingFormat(1, "");
|
|
|
- NumberingRenderData numberedImages = new NumberingRenderData(
|
|
|
- numberingFormat,
|
|
|
- paragraphImages);
|
|
|
- data.put("relatedEntitiesImage", numberedImages);
|
|
|
|
|
|
+ List<Map<String, Object>> imageDataList = (List<Map<String, Object>>) data.get("relatedEntitiesImage");
|
|
|
+ if (CollectionUtils.isNotEmpty(imageDataList)) {
|
|
|
+ for (Map<String, Object> imageData : imageDataList) {
|
|
|
+ ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
|
|
|
+
|
|
|
+ if (imageData.containsKey("base64")) {
|
|
|
+ String base64 = (String) imageData.get("base64");
|
|
|
+
|
|
|
+ String fileExtension = (String) imageData.get("fileExtension");
|
|
|
+ PictureType pictureType = PictureType.PNG; // 默认PNG
|
|
|
+ if (fileExtension != null) {
|
|
|
+ if (fileExtension.equalsIgnoreCase(".jpg") || fileExtension.equalsIgnoreCase(".jpeg")) {
|
|
|
+ pictureType = PictureType.JPEG;
|
|
|
+ } else if (fileExtension.equalsIgnoreCase(".gif")) {
|
|
|
+ pictureType = PictureType.GIF;
|
|
|
+ } else if (fileExtension.equalsIgnoreCase(".bmp")) {
|
|
|
+ pictureType = PictureType.BMP;
|
|
|
+ } else if (fileExtension.equalsIgnoreCase(".png")) {
|
|
|
+ pictureType = PictureType.PNG;
|
|
|
+ } else if (fileExtension.equalsIgnoreCase(".tiff")) {
|
|
|
+ pictureType = PictureType.TIFF;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ paragraphRenderData.addPicture(
|
|
|
+ Pictures.ofBase64(base64, pictureType)
|
|
|
+ .size((Integer) imageData.get("width"), (Integer) imageData.get("height"))
|
|
|
+ .create());
|
|
|
+ }
|
|
|
+ paragraphImages.add(paragraphRenderData);
|
|
|
+ }
|
|
|
+ NumberingFormat numberingFormat = new NumberingFormat(1, "");
|
|
|
+ NumberingRenderData numberedImages = new NumberingRenderData(numberingFormat, paragraphImages);
|
|
|
+ data.put("relatedEntitiesImage", numberedImages);
|
|
|
+ }
|
|
|
|
|
|
-// 处理 businessLicenseImage
|
|
|
+ // 处理 businessLicenseImage
|
|
|
processImageListToNumberedRenderData("businessLicenseImage", data);
|
|
|
|
|
|
-// 处理 bankCertificateImage
|
|
|
+ // 处理 bankCertificateImage
|
|
|
processImageListToNumberedRenderData("bankCertificateImage", data);
|
|
|
|
|
|
-// 处理 isoCertificationImage
|
|
|
+ // 处理 isoCertificationImage
|
|
|
processImageListToNumberedRenderData("isoCertificationImage", data);
|
|
|
|
|
|
-// 处理 securityLevelCertification
|
|
|
+ // 处理 securityLevelCertification
|
|
|
processImageListToNumberedRenderData("securityLevelCertification", data);
|
|
|
|
|
|
-// 处理 otherCertifications
|
|
|
+ // 处理 otherCertifications
|
|
|
processImageListToNumberedRenderData("otherCertifications", data);
|
|
|
|
|
|
-// 处理 organizationalStructureImage
|
|
|
+ // 处理 organizationalStructureImage
|
|
|
processImageListToNumberedRenderData("organizationalStructureImage", data);
|
|
|
|
|
|
-// 处理 taxPaymentCertificateImage
|
|
|
+ // 处理 taxPaymentCertificateImage
|
|
|
processImageListToNumberedRenderData("taxPaymentCertificateImage", data);
|
|
|
|
|
|
-// 处理 nsxydjwj
|
|
|
+ // 处理 nsxydjwj
|
|
|
processImageListToNumberedRenderData("nsxydjwj", data);
|
|
|
|
|
|
-// 处理 interestConflict
|
|
|
+ // 处理 interestConflict
|
|
|
processImageListToNumberedRenderData("interestConflict", data);
|
|
|
|
|
|
-// 处理 disanfangcangzhao
|
|
|
+ // 处理 disanfangcangzhao
|
|
|
processImageListToNumberedRenderData("disanfangcangzhao", data);
|
|
|
|
|
|
-// 处理 overallGuaranteeStatement
|
|
|
+ // 处理 overallGuaranteeStatement
|
|
|
processImageListToNumberedRenderData("overallGuaranteeStatement", data);
|
|
|
switch (reportType) {
|
|
|
case PLATFORM_COMPANY:
|
|
@@ -133,35 +155,64 @@ public class ReportServiceImpl implements ReportService {
|
|
|
}
|
|
|
|
|
|
private void processImageListToNumberedRenderData(String key, Map<String, Object> data) {
|
|
|
- // 从 data 中获取原始图片数据列表
|
|
|
+ // 从data中获取原始图片数据列表
|
|
|
List<Map<String, Object>> rawImageDataList = (List<Map<String, Object>>) data.get(key);
|
|
|
|
|
|
+ // 处理空数据情况
|
|
|
if (rawImageDataList == null || rawImageDataList.isEmpty()) {
|
|
|
String textKey = key + "Text";
|
|
|
if (data.containsKey(textKey)) {
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
-
|
|
|
// 处理非空图片数据
|
|
|
List<ParagraphRenderData> paragraphImages = new ArrayList<>();
|
|
|
for (Map<String, Object> imageInfo : rawImageDataList) {
|
|
|
- ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
|
|
|
- // 从原始数据中获取图片属性
|
|
|
+ ParagraphRenderData paragraph = new ParagraphRenderData();
|
|
|
+ // 提取Base64数据和文件扩展名
|
|
|
+ String base64 = (String) imageInfo.get("base64");
|
|
|
String url = (String) imageInfo.get("url");
|
|
|
+ String fileExtension = (String) imageInfo.get("fileExtension");
|
|
|
Integer width = (Integer) imageInfo.get("width");
|
|
|
Integer height = (Integer) imageInfo.get("height");
|
|
|
|
|
|
+ // 确定图片类型(默认为PNG)
|
|
|
+ PictureType pictureType = this.determinePictureType(fileExtension);
|
|
|
+
|
|
|
// 添加图片到段落渲染数据
|
|
|
- paragraphRenderData.addPicture(Pictures.of(url)
|
|
|
- .size(width, height)
|
|
|
- .create());
|
|
|
- paragraphImages.add(paragraphRenderData);
|
|
|
- }
|
|
|
+ paragraph.addPicture(Pictures.ofBase64(base64, pictureType)
|
|
|
+ .size(width, height)
|
|
|
+ .create());
|
|
|
+
|
|
|
+ paragraphImages.add(paragraph);
|
|
|
|
|
|
+ }
|
|
|
NumberingFormat numberingFormat = new NumberingFormat(1, "");
|
|
|
NumberingRenderData numberedImages = new NumberingRenderData(numberingFormat, paragraphImages);
|
|
|
data.put(key, numberedImages);
|
|
|
}
|
|
|
+ // 辅助方法:根据文件扩展名确定图片类型
|
|
|
+ private PictureType determinePictureType(String fileExtension) {
|
|
|
+ if (fileExtension == null) {
|
|
|
+ return PictureType.PNG;
|
|
|
+ }
|
|
|
+
|
|
|
+ String ext = fileExtension.toLowerCase();
|
|
|
+
|
|
|
+ // 提取扩展名部分(去除可能的前缀点)
|
|
|
+ String normalizedExt = ext.startsWith(".")
|
|
|
+ ? ext.substring(1)
|
|
|
+ : ext;
|
|
|
+
|
|
|
+ return switch (normalizedExt) {
|
|
|
+ case "jpg", "jpeg" -> PictureType.JPEG;
|
|
|
+ case "gif" -> PictureType.GIF;
|
|
|
+ case "bmp" -> PictureType.BMP;
|
|
|
+ case "tiff" -> PictureType.TIFF;
|
|
|
+ default -> PictureType.PNG; // 默认返回 PNG
|
|
|
+ };
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+
|