package com.ruoyi.system.service.impl;
|
|
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>
|
* 广告物料零星结算表 服务实现类
|
* </p>
|
*
|
* @author mitao
|
* @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();
|
}
|
}
|
}
|