maven
2026-02-03 43e3fe43675a68c375313abfbeee84ad60e6d9e3
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -4,6 +4,7 @@
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.utils.OrderUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.security.LoginUser;
@@ -30,6 +31,7 @@
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
@@ -106,10 +108,13 @@
    @Override
    public int updatePro(ProcurementUpdateDto procurementDto) {
        ProcurementRecordStorage procurementRecordStorageById = getProcurementRecordById(procurementDto.getId());
        procurementRecordStorageById.setCreateTime(LocalDate.parse(procurementDto.getInboundDate(), DateTimeFormatter.ofPattern("yyyy-MM-dd")).atTime(LocalTime.MIDNIGHT));
        procurementRecordStorageById.setInboundNum(procurementDto.getQuantityStock());
        procurementRecordStorageById.setWarnNum(procurementDto.getWarnNum());
        procurementRecordStorageById.setUpdateUser(SecurityUtils.getLoginUser().getUserId());
        procurementRecordStorageById.setUpdateTime(LocalDateTime.now());
        procurementRecordStorageById.setUnitPrice(procurementDto.getUnitPrice());
        procurementRecordStorageById.setTotalPrice(procurementDto.getTotalPrice());
        return procurementRecordMapper.updateById(procurementRecordStorageById);
    }
@@ -193,15 +198,28 @@
        if(salesLedgerProduct == null){
            throw new RuntimeException("销售台账产品不存在");
        }
        // 根据大类,规格查询所有产品id
        LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductLambdaQueryWrapper = new LambdaQueryWrapper<>();
        salesLedgerProductLambdaQueryWrapper.eq(SalesLedgerProduct::getProductCategory, salesLedgerProduct.getProductCategory())
                .eq(SalesLedgerProduct::getSpecificationModel, salesLedgerProduct.getSpecificationModel())
                .eq(SalesLedgerProduct::getType, 1);
        List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(salesLedgerProductLambdaQueryWrapper);
        if(CollectionUtils.isEmpty(salesLedgerProducts)){
            throw new RuntimeException("没有找到对应的产品");
        }
        salesLedgerProduct.setMinStock(procurementDto.getMinStock());
        salesLedgerProductMapper.updateById(salesLedgerProduct);
        ProcurementRecordStorage procurementRecordStorageById = getProcurementRecordById(procurementDto.getId());
        procurementRecordStorageById.setCreateBy(sysUser.getNickName());
        procurementRecordStorageById.setCreateUser(sysUser.getUserId());
        procurementRecordStorageById.setUpdateTime(LocalDateTime.parse(entryDateStr,df));
        procurementRecordStorageById.setUpdateUser(loginUser.getUserId());
        procurementRecordStorageById.setCreateTime(LocalDateTime.parse(createTimeStr,df));
        procurementRecordMapper.updateById(procurementRecordStorageById);
        LambdaQueryWrapper<ProcurementRecordStorage> procurementRecordStorageLambdaQueryWrapper = new LambdaQueryWrapper<>();
        procurementRecordStorageLambdaQueryWrapper.in(ProcurementRecordStorage::getSalesLedgerProductId, salesLedgerProducts.stream().map(SalesLedgerProduct::getId).collect(Collectors.toList()));
        ProcurementRecordStorage procurementRecordStorage = ProcurementRecordStorage.builder().build();
        procurementRecordStorage.setUnitPrice(procurementDto.getUnitPrice());
        procurementRecordStorage.setTotalPrice(procurementDto.getTotalPrice());
        procurementRecordStorage.setCreateBy(sysUser.getNickName());
        procurementRecordStorage.setCreateUser(sysUser.getUserId());
        procurementRecordStorage.setUpdateTime(LocalDateTime.parse(entryDateStr,df));
        procurementRecordStorage.setUpdateUser(loginUser.getUserId());
        procurementRecordStorage.setCreateTime(LocalDateTime.parse(createTimeStr,df));
        procurementRecordMapper.update(procurementRecordStorage,procurementRecordStorageLambdaQueryWrapper);
        return 0;
    }
@@ -419,7 +437,7 @@
        for (ProcurementPageDto dto : procurementPageDtos) {
            // 根据采购台账ID筛选对应的出库记录
            List<ProcurementRecordOut> collect1 = procurementRecords.stream()
                    .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId()))
                    .filter(item -> item.getProcurementRecordStorageId().equals(dto.getId()))
                    .collect(Collectors.toList());
            // 如果没有相关的出库记录,跳过该条数据
@@ -452,6 +470,7 @@
            Long aLong = customStorageMapper.selectCount(null);
            item.setInboundBatches(aLong.equals(0L) ? "第1批次(自定义入库)" : "第"+ (aLong + 1) + "批次(自定义入库)" );
            item.setCreateBy(loginUser.getNickName());
            item.setCode(OrderUtils.countTodayByCreateTime(customStorageMapper, ""));
            customStorageMapper.insert(item);
        });
        return AjaxResult.success("自定义入库成功");
@@ -459,21 +478,7 @@
    @Override
    public IPage<CustomStorage> listPageByCustom(Page page, CustomStorage customStorage) {
        LambdaQueryWrapper<CustomStorage> customStorageLambdaQueryWrapper = new LambdaQueryWrapper<>();
        if(customStorage != null){
            if(!StringUtils.isEmpty(customStorage.getSupplierName())){
                customStorageLambdaQueryWrapper.like(CustomStorage::getSupplierName, customStorage.getSupplierName());
            }
            // 筛选入库时间
            if(customStorage.getTimeStr() != null){
                customStorageLambdaQueryWrapper.eq(CustomStorage::getInboundDate, customStorage.getTimeStr());
            }
            if(!StringUtils.isEmpty(customStorage.getProductCategory())){
                customStorageLambdaQueryWrapper.like(CustomStorage::getProductCategory, customStorage.getProductCategory());
            }
        }
        customStorageLambdaQueryWrapper.orderByDesc(CustomStorage::getInboundDate);
        IPage<CustomStorage> procurementPageDtoIPage = customStorageMapper.selectPage(page, customStorageLambdaQueryWrapper);
        IPage<CustomStorage> procurementPageDtoIPage = customStorageMapper.listPageByCustom(page, customStorage);
        procurementPageDtoIPage.getRecords().forEach(item -> item.setInboundNum0(item.getInboundNum()));
        List<CustomStorage> procurementPageDtos = procurementPageDtoIPage.getRecords();
        // 计算待入库数量
@@ -518,38 +523,38 @@
        List<ProcurementPageDtoCopy> procurementPageDtoCopyList = procurementPageDtoCopyIPage.getRecords();
        // 计算待入库数量
        // 查询采购记录已入库数量
        List<Integer> collect = procurementPageDtoCopyList.stream().map(ProcurementPageDtoCopy::getId).collect(Collectors.toList());
        if(CollectionUtils.isEmpty( collect)){
            return procurementPageDtoCopyIPage;
        }
        LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
        procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect);
        procurementRecordLambdaQueryWrapper.eq(ProcurementRecordOut::getType, 2);
        List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
        if(CollectionUtils.isEmpty( procurementRecords)){
            return procurementPageDtoCopyIPage;
        }
//        List<Integer> collect = procurementPageDtoCopyList.stream().map(ProcurementPageDtoCopy::getId).collect(Collectors.toList());
//        if(CollectionUtils.isEmpty( collect)){
//            return procurementPageDtoCopyIPage;
//        }
//        LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
//        procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect);
//        procurementRecordLambdaQueryWrapper.eq(ProcurementRecordOut::getType, 2);
//        List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
//        if(CollectionUtils.isEmpty( procurementRecords)){
//            return procurementPageDtoCopyIPage;
//        }
        for (ProcurementPageDtoCopy dto : procurementPageDtoCopyList) {
            // 根据采购台账ID筛选对应的出库记录
            List<ProcurementRecordOut> collect1 = procurementRecords.stream()
                    .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId()))
                    .collect(Collectors.toList());
//            List<ProcurementRecordOut> collect1 = procurementRecords.stream()
//                    .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId()))
//                    .collect(Collectors.toList());
            // 如果没有相关的出库记录,跳过该条数据
            if(CollectionUtils.isEmpty(collect1)){
                dto.setInboundNum0(dto.getInboundNum());
                dto.setTotalInboundNum(BigDecimal.ZERO);
                continue;
            }
//            if(CollectionUtils.isEmpty(collect1)){
//                dto.setInboundNum0(dto.getInboundNum());
//                dto.setTotalInboundNum(BigDecimal.ZERO);
//                continue;
//            }
            // 计算已出库数量总和,并设置待出库数量
            BigDecimal totalInboundNum = collect1.stream()
                    .map(ProcurementRecordOut::getInboundNum)
                    .reduce(BigDecimal.ZERO, BigDecimal::add);
//            BigDecimal totalInboundNum = collect1.stream()
//                    .map(ProcurementRecordOut::getInboundNum)
//                    .reduce(BigDecimal.ZERO, BigDecimal::add);
            // 出库数量 = 总数量 - 待出库数量
            dto.setTotalInboundNum(totalInboundNum);
            dto.setTotalInboundNum(dto.getInboundNum().subtract(dto.getInboundNum0()));
            // 待出库数量 = 总数量 - 已出库数量
            dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum));
//            dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum));
            // 库存价值
            if(dto.getUnitPrice() != null){
                dto.setTotalPrice(dto.getTotalInboundNum().multiply(dto.getUnitPrice()));
@@ -632,6 +637,35 @@
    }
    @Override
    public int updateManagementByCustom(ProcurementManagementUpdateDto procurementDto) {
        CustomStorage customStorage = customStorageMapper.selectById(procurementDto.getId());
        if(customStorage == null){
            throw new RuntimeException("材料库存不存在");
        }
        LambdaQueryWrapper<CustomStorage> customStorageLambdaQueryWrapper = new LambdaQueryWrapper<>();
        customStorageLambdaQueryWrapper.eq(CustomStorage::getProductCategory, customStorage.getProductCategory())
                .eq(CustomStorage::getSpecificationModel, customStorage.getSpecificationModel());
        CustomStorage one = new CustomStorage();
        one.setTaxInclusiveUnitPrice(procurementDto.getTaxInclusiveUnitPrice());
        one.setTaxInclusiveTotalPrice(procurementDto.getTaxInclusiveTotalPrice());
        return customStorageMapper.update(one,customStorageLambdaQueryWrapper);
    }
    @Override
    public BigDecimal getProcurementAmount(Long salesProductId) {
        LambdaQueryWrapper<ProcurementRecordStorage> procurementRecordStorageLambdaQueryWrapper = new LambdaQueryWrapper<>();
        procurementRecordStorageLambdaQueryWrapper.eq(ProcurementRecordStorage::getSalesLedgerProductId, salesProductId)
                .eq(ProcurementRecordStorage::getType, 2);
        List<ProcurementRecordStorage> procurementRecordStorages = procurementRecordMapper.selectList(procurementRecordStorageLambdaQueryWrapper);
        if(CollectionUtils.isEmpty( procurementRecordStorages)){
            return BigDecimal.ZERO;
        }
        return procurementRecordStorages.stream()
                .map(ProcurementRecordStorage::getInboundNum)
                .reduce(BigDecimal.ZERO, BigDecimal::add);
    }
    @Override
    public int add(ProcurementAddDto procurementDto) {
        LoginUser loginUser = SecurityUtils.getLoginUser();
        // 批量新增
@@ -648,8 +682,8 @@
                    .inboundNum(detail.getInboundQuantity())
                    .type(procurementDto.getType())
                    .warnNum(detail.getWarnNum())
                    .unitPrice(detail.getUnitPrice())
                    .totalPrice(detail.getInboundQuantity().multiply(detail.getUnitPrice()))
                    .unitPrice(detail.getTaxInclusiveUnitPrice())
                    .totalPrice(detail.getInboundQuantity().multiply(detail.getTaxInclusiveUnitPrice()))
                    .createTime(LocalDateTime.now())
                    .createUser(loginUser.getUserId())
                    .updateTime(LocalDateTime.now())