From e8e30e5474c1fd0c14390710066e40c17155ad37 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期三, 22 十月 2025 17:41:01 +0800
Subject: [PATCH] 广告物料零星结算导入

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdMaterialSporadicSettlementServiceImpl.java |  121 +++++++++++++++++++++++++++++++++++++++-
 1 files changed, 118 insertions(+), 3 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdMaterialSporadicSettlementServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdMaterialSporadicSettlementServiceImpl.java
index 5936b4a..94a38ae 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdMaterialSporadicSettlementServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdMaterialSporadicSettlementServiceImpl.java
@@ -1,10 +1,33 @@
 package com.ruoyi.system.service.impl;
 
-import com.ruoyi.system.model.AssetAdMaterialSporadicSettlement;
-import com.ruoyi.system.mapper.AssetAdMaterialSporadicSettlementMapper;
-import com.ruoyi.system.service.AssetAdMaterialSporadicSettlementService;
+import cn.afterturn.easypoi.excel.ExcelImportUtil;
+import cn.afterturn.easypoi.excel.entity.ImportParams;
+import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.system.dto.asset.AssetAdMaterialSporadicSettlementDTO;
+import com.ruoyi.system.export.AssetAdMaterialSporadicSettlementImport;
+import com.ruoyi.system.mapper.AssetAdMaterialSporadicSettlementMapper;
+import com.ruoyi.system.model.AssetAdMaterialSporadicSettlement;
+import com.ruoyi.system.model.AssetAdMaterialSporadicSettlementInfo;
+import com.ruoyi.system.service.AssetAdMaterialSporadicSettlementInfoService;
+import com.ruoyi.system.service.AssetAdMaterialSporadicSettlementService;
+import com.ruoyi.system.service.OssService;
+import lombok.Cleanup;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
 
 /**
  * <p>
@@ -15,6 +38,98 @@
  * @since 2025-10-17
  */
 @Service
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class AssetAdMaterialSporadicSettlementServiceImpl extends ServiceImpl<AssetAdMaterialSporadicSettlementMapper, AssetAdMaterialSporadicSettlement> implements AssetAdMaterialSporadicSettlementService {
+    private final OssService ossService;
+    private final AssetAdMaterialSporadicSettlementInfoService assetAdMaterialSporadicSettlementInfoService;
 
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void importData(MultipartFile file, AssetAdMaterialSporadicSettlementDTO dto) {
+        try {
+            ImportParams importParams = new ImportParams();
+            importParams.setTitleRows(0);
+            importParams.setHeadRows(1);
+            @Cleanup
+            InputStream inputStream = file.getInputStream();
+            List<AssetAdMaterialSporadicSettlementImport> list = ExcelImportUtil.importExcel(inputStream, AssetAdMaterialSporadicSettlementImport.class, importParams);
+            validateFields(list);
+            uploadToOss(list);
+            //保存
+            AssetAdMaterialSporadicSettlement assetAdMaterialSporadicSettlement = BeanUtil.copyProperties(dto, AssetAdMaterialSporadicSettlement.class);
+            assetAdMaterialSporadicSettlement.setCreateBy(SecurityUtils.getLoginUser().getUser().getNickName());
+            assetAdMaterialSporadicSettlement.setDeptId(Integer.parseInt(SecurityUtils.getLoginUser().getUser().getDeptId()));
+            save(assetAdMaterialSporadicSettlement);
+            //保存明细
+            List<AssetAdMaterialSporadicSettlementInfo> assetAdMaterialSporadicSettlementInfos = BeanUtil.copyToList(list, AssetAdMaterialSporadicSettlementInfo.class);
+            assetAdMaterialSporadicSettlementInfos.forEach(item -> item.setAdMaterialSporadicSettlementId(assetAdMaterialSporadicSettlement.getId()));
+            assetAdMaterialSporadicSettlementInfoService.saveBatch(assetAdMaterialSporadicSettlementInfos);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private void validateFields(List<AssetAdMaterialSporadicSettlementImport> list) {
+        Optional<AssetAdMaterialSporadicSettlementImport> any = list.stream()
+                .filter(item -> StringUtils.isBlank(item.getAdName())).findAny();
+        if (any.isPresent()) {
+            throw new ServiceException("【名称】不能为空,请检查该列是否填写完整");
+        }
+        Optional<AssetAdMaterialSporadicSettlementImport> quantityOpt = list.stream()
+                .filter(item -> Objects.isNull(item.getQuantity())).findAny();
+        if (quantityOpt.isPresent()) {
+            throw new ServiceException("【数量】不能为空,请检查该列是否填写完整");
+        }
+        Optional<AssetAdMaterialSporadicSettlementImport> priceOpt = list.stream()
+                .filter(item -> Objects.isNull(item.getUnitPrice())).findAny();
+        if (priceOpt.isPresent()) {
+            throw new ServiceException("【单价】不能为空,请检查该列是否填写完整");
+        }
+    }
+    /**
+     * 文件转存
+     * @param list
+     */
+    private void uploadToOss(List<AssetAdMaterialSporadicSettlementImport> list) {
+        //遍历每一条数据
+        for (AssetAdMaterialSporadicSettlementImport settlementImport : list) {
+            if (StringUtils.isNotEmpty(settlementImport.getDesignLegendTemp())) {
+                String ossUrl = getOssUrl(settlementImport.getDesignLegendTemp());
+                settlementImport.setDesignLegend(ossUrl);
+            }
+            if (StringUtils.isNotEmpty(settlementImport.getInstallationLegendTemp())) {
+                String ossUrl = getOssUrl(settlementImport.getInstallationLegendTemp());
+                settlementImport.setInstallationLegend(ossUrl);
+            }
+        }
+        //删除图片缓存
+        for (AssetAdMaterialSporadicSettlementImport settlementImport : list) {
+            if (StringUtils.isNotEmpty(settlementImport.getDesignLegendTemp())) {
+                deleteImageCache(settlementImport.getDesignLegendTemp());
+            }
+            if (StringUtils.isNotEmpty(settlementImport.getInstallationLegendTemp())) {
+                deleteImageCache(settlementImport.getInstallationLegendTemp());
+            }
+        }
+    }
+
+    private String getOssUrl(String filePath) {
+        try {
+            //获取到暂存的文件
+            File tmpFile = new File(filePath);
+            FileInputStream fileInputStream = new FileInputStream(tmpFile);
+            //转换为 multipartFile 类
+            return ossService.uploadByInputStream(fileInputStream);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+    private void deleteImageCache(String filePath) {
+        //获取到暂存的文件
+        File tmpFile = new File(filePath);
+        if (tmpFile.exists() && tmpFile.isFile()) {
+            tmpFile.delete();
+        }
+    }
 }

--
Gitblit v1.7.1