| | |
| | | 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> |
| | |
| | | * @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(); |
| | | } |
| | | } |
| | | } |