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