mitao
昨天 5b13db7e2c95385d69b8bdb449560bbbfe359146
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/AssetAdMaterialSporadicSettlementServiceImpl.java
@@ -3,17 +3,25 @@
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.constants.AssetDeptConstant;
import com.ruoyi.system.dto.asset.AssetAdMaterialSporadicSettlementDTO;
import com.ruoyi.system.dto.asset.AssetAdMaterialSporadicSettlementImportDTO;
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.query.AssetAdMaterialSporadicSettlementQuery;
import com.ruoyi.system.service.AssetAdMaterialSporadicSettlementInfoService;
import com.ruoyi.system.service.AssetAdMaterialSporadicSettlementService;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.system.service.OssService;
import com.ruoyi.system.vo.asset.AssetAdMaterialSporadicSettlementDetailVO;
import com.ruoyi.system.vo.asset.AssetAdMaterialSporadicSettlementVO;
import lombok.Cleanup;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
@@ -25,6 +33,8 @@
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
@@ -42,10 +52,11 @@
public class AssetAdMaterialSporadicSettlementServiceImpl extends ServiceImpl<AssetAdMaterialSporadicSettlementMapper, AssetAdMaterialSporadicSettlement> implements AssetAdMaterialSporadicSettlementService {
    private final OssService ossService;
    private final AssetAdMaterialSporadicSettlementInfoService assetAdMaterialSporadicSettlementInfoService;
    private final ISysUserService sysUserService;
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void importData(MultipartFile file, AssetAdMaterialSporadicSettlementDTO dto) {
    public void importData(MultipartFile file, AssetAdMaterialSporadicSettlementImportDTO dto) {
        try {
            ImportParams importParams = new ImportParams();
            importParams.setTitleRows(0);
@@ -57,6 +68,7 @@
            uploadToOss(list);
            //保存
            AssetAdMaterialSporadicSettlement assetAdMaterialSporadicSettlement = BeanUtil.copyProperties(dto, AssetAdMaterialSporadicSettlement.class);
            assetAdMaterialSporadicSettlement.setTotalAmount(calculateTotalAmount(list));
            assetAdMaterialSporadicSettlement.setCreateBy(SecurityUtils.getLoginUser().getUser().getNickName());
            assetAdMaterialSporadicSettlement.setDeptId(Integer.parseInt(SecurityUtils.getLoginUser().getUser().getDeptId()));
            save(assetAdMaterialSporadicSettlement);
@@ -67,6 +79,12 @@
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    private BigDecimal calculateTotalAmount(List<AssetAdMaterialSporadicSettlementImport> list) {
        return list.stream().map(item -> BigDecimal.valueOf(item.getQuantity())
                        .multiply(item.getUnitPrice()).setScale(2, RoundingMode.HALF_UP))
                .reduce(BigDecimal.ZERO, BigDecimal::add);
    }
    private void validateFields(List<AssetAdMaterialSporadicSettlementImport> list) {
@@ -132,4 +150,77 @@
            tmpFile.delete();
        }
    }
    @Override
    public IPage<AssetAdMaterialSporadicSettlementVO> getPageList(AssetAdMaterialSporadicSettlementQuery query) {
        // 数据权限:超级管理员/资产管理部查看所有数据,其他部门查看当前及下级部门的数据
        Long userId = SecurityUtils.getUserId();
        boolean isAdmin = SecurityUtils.isAdmin(userId);
        if (!isAdmin) {
            try {
                // 获取当前用户的部门名称
                String deptName = sysUserService.selectUserById(userId).getDeptName();
                // 非超级管理员且非资产管理部,设置部门权限
                if (!AssetDeptConstant.ASSET_INVENTORY_DEPT_NAMES.contains(deptName)) {
                    query.setDeptId(Integer.valueOf(SecurityUtils.getLoginUser().getDeptId()));
                }
            } catch (Exception e) {
                // 如果获取部门信息失败,默认设置部门权限
                try {
                    query.setDeptId(Integer.valueOf(SecurityUtils.getLoginUser().getDeptId()));
                } catch (Exception ex) {
                    // ignore parse, leave null if cannot parse
                }
            }
        }
        // 直接使用Mapper的分页查询方法
        Page<AssetAdMaterialSporadicSettlementVO> page = new Page<>(query.getPageNum(), query.getPageSize());
        return baseMapper.getPageList(query);
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public Boolean add(AssetAdMaterialSporadicSettlementDTO dto) {
        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(dto.getInfos(), AssetAdMaterialSporadicSettlementInfo.class);
        assetAdMaterialSporadicSettlementInfos.forEach(item -> item.setAdMaterialSporadicSettlementId(assetAdMaterialSporadicSettlement.getId()));
      return assetAdMaterialSporadicSettlementInfoService.saveBatch(assetAdMaterialSporadicSettlementInfos);
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public Boolean edit(AssetAdMaterialSporadicSettlementDTO dto) {
        if (Objects.isNull(dto.getId())) {
            throw new ServiceException("ID不能为空");
        }
        AssetAdMaterialSporadicSettlement assetAdMaterialSporadicSettlement = BeanUtil.copyProperties(dto, AssetAdMaterialSporadicSettlement.class);
        updateById(assetAdMaterialSporadicSettlement);
        //删除原有明细
        assetAdMaterialSporadicSettlementInfoService.removeBySettlementId(dto.getId());
        //保存明细
        List<AssetAdMaterialSporadicSettlementInfo> assetAdMaterialSporadicSettlementInfos = BeanUtil.copyToList(dto.getInfos(), AssetAdMaterialSporadicSettlementInfo.class);
        assetAdMaterialSporadicSettlementInfos.forEach(item -> item.setAdMaterialSporadicSettlementId(assetAdMaterialSporadicSettlement.getId()));
       return assetAdMaterialSporadicSettlementInfoService.saveBatch(assetAdMaterialSporadicSettlementInfos);
    }
    @Override
    public Boolean deleteById(Integer id) {
        //删除明细
        assetAdMaterialSporadicSettlementInfoService.removeBySettlementId(id);
        return removeById(id);
    }
    @Override
    public AssetAdMaterialSporadicSettlementDetailVO getDetail(Integer id) {
        AssetAdMaterialSporadicSettlement assetAdMaterialSporadicSettlement = getById(id);
        AssetAdMaterialSporadicSettlementDetailVO vo = BeanUtil.copyProperties(assetAdMaterialSporadicSettlement, AssetAdMaterialSporadicSettlementDetailVO.class);
        vo.setInfos(assetAdMaterialSporadicSettlementInfoService.getBySettlementId(id));
        return vo;
    }
}