liding
5 天以前 92d4fac0b58498efc6be7764f00364535beb3d71
main-business/src/main/java/com/ruoyi/business/service/impl/OfficialInventoryServiceImpl.java
@@ -7,9 +7,13 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.basic.entity.CoalField;
import com.ruoyi.basic.entity.CoalInfo;
import com.ruoyi.basic.entity.CoalValue;
import com.ruoyi.basic.entity.Supply;
import com.ruoyi.basic.mapper.CoalFieldMapper;
import com.ruoyi.basic.mapper.CoalInfoMapper;
import com.ruoyi.basic.mapper.CoalValueMapper;
import com.ruoyi.basic.mapper.SupplyMapper;
import com.ruoyi.business.dto.OfficialInventoryDto;
import com.ruoyi.business.entity.OfficialInventory;
import com.ruoyi.business.mapper.OfficialInventoryMapper;
@@ -22,7 +26,10 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@@ -43,12 +50,17 @@
    private final CoalFieldMapper coalFieldMapper;
    private final CoalInfoMapper coalInfoMapper;
    private final SupplyMapper supplyMapper;
    @Override
    public IPage<OfficialInventoryDto> selectOfficialInventoryList(Page page, OfficialInventoryDto officialInventoryDto) {
        //  先查出原始数据(OfficialInventory)
        LambdaQueryWrapper<OfficialInventory> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.orderByAsc(OfficialInventory::getCreateTime);
        IPage<OfficialInventory> entityPage = officialInventoryMapper.selectPage(page, queryWrapper);
        //  创建一个新的 Dto 分页结果
@@ -57,6 +69,19 @@
        List<OfficialInventoryDto> dtoList = new ArrayList<>();
        List<Long> supplierIds = entityPage.getRecords().stream()
                .map(OfficialInventory::getSupplierId)
                .toList();
        Map<Long, Supply> supplyMap;
        if (!supplierIds.isEmpty()) {
            List<Supply> infos = supplyMapper.selectList(new LambdaQueryWrapper<Supply>().in(Supply::getId, supplierIds));
            supplyMap = infos.stream().collect(Collectors.toMap(Supply::getId, Function.identity()));
        } else {
            supplyMap = new HashMap<>();
        }
        //  查询所有可用字段(CoalField)
        List<CoalField> coalFields = coalFieldMapper.selectList(null);
        List<String> allFieldNames = coalFields.stream()
@@ -64,10 +89,32 @@
                .distinct()
                .collect(Collectors.toList());
        //查询煤种ids
        List<Long> coalIds = entityPage.getRecords().stream()
                .map(OfficialInventory::getCoalId)
                .distinct()
                .collect(Collectors.toList());
        // 批量查询CoalInfo
        Map<Long, CoalInfo> coalInfoMap;
        if (!coalIds.isEmpty()) {
            List<CoalInfo> coalInfos = coalInfoMapper.selectList(new LambdaQueryWrapper<CoalInfo>().in(CoalInfo::getId, coalIds));
            coalInfoMap = coalInfos.stream().collect(Collectors.toMap(CoalInfo::getId, Function.identity()));
        } else {
            coalInfoMap = new HashMap<>();
        }
        //  遍历每条记录,进行转换并填充 fields
        for (OfficialInventory entity : entityPage.getRecords()) {
            OfficialInventoryDto dto = new OfficialInventoryDto();
            BeanUtils.copyProperties(entity, dto);
            // 供应商信息
            Supply supply = supplyMap.get(entity.getSupplierId());
            if (supply != null) {
                dto.setSupplierName(supply.getSupplierName());
            }
            List<CoalValue> coalValues;
            if (entity.getMergeId() == null) {
                coalValues = coalValueMapper.selectList(new LambdaQueryWrapper<CoalValue>()
@@ -97,6 +144,12 @@
                fields.add(fieldMap);
            }
            // 设置Coal信息
            CoalInfo coalInfo = coalInfoMap.get(entity.getCoalId());
            if (coalInfo != null) {
                dto.setCoal(coalInfo.getCoal());
            }
            // 设置到 DTO 中
            dto.setFields(fields);
            dtoList.add(dto);
@@ -110,6 +163,64 @@
    public int editOfficial(OfficialInventoryDto officialInventoryDto) {
        OfficialInventory officialInventory = new OfficialInventory();
        BeanUtils.copyProperties(officialInventoryDto, officialInventory);
        if (officialInventoryDto.getMergeId() != null) {
            // 1. 构建查询条件
            LambdaQueryWrapper<CoalValue> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(CoalValue::getPlanId, officialInventoryDto.getId())
                    .eq(CoalValue::getType, "2");
            // 2. 查询多个符合条件的CoalValue记录
            List<CoalValue> coalValues = coalValueMapper.selectList(queryWrapper);
            if (!CollectionUtils.isEmpty(coalValues) && !CollectionUtils.isEmpty(officialInventoryDto.getFields())) {
                // 3. 创建字段映射关系 (field key -> coal_value)
                Map<String, String> fieldValueMap = new HashMap<>();
                for (Map<String, String> fieldMap : officialInventoryDto.getFields()) {
                    fieldValueMap.putAll(fieldMap);
                }
                // 4. 更新
                for (CoalValue coalValue : coalValues) {
                    String fieldKey = coalValue.getFields(); // 数据库中的field key
                    if (fieldValueMap.containsKey(fieldKey)) {
                        String newValue = fieldValueMap.get(fieldKey);
                        if (!Objects.equals(coalValue.getCoalValue(), newValue)) {
                            coalValue.setCoalValue(newValue);
                            coalValueMapper.updateById(coalValue);
                        }
                    }
                }
            }
        } else {
            // 构建查询条件
            LambdaQueryWrapper<CoalValue> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(CoalValue::getPlanId, officialInventoryDto.getPendingId())
                    .eq(CoalValue::getType, "1");
            // 2. 查询多个符合条件的CoalValue记录
            List<CoalValue> coalValues = coalValueMapper.selectList(queryWrapper);
            if (!CollectionUtils.isEmpty(coalValues) && !CollectionUtils.isEmpty(officialInventoryDto.getFields())) {
                // 3. 创建字段映射关系 (field key -> coal_value)
                Map<String, String> fieldValueMap = new HashMap<>();
                for (Map<String, String> fieldMap : officialInventoryDto.getFields()) {
                    fieldValueMap.putAll(fieldMap);
                }
                // 4. 更新
                for (CoalValue coalValue : coalValues) {
                    String fieldKey = coalValue.getFields(); // 数据库中的field key
                    if (fieldValueMap.containsKey(fieldKey)) {
                        String newValue = fieldValueMap.get(fieldKey);
                        if (!Objects.equals(coalValue.getCoalValue(), newValue)) {
                            coalValue.setCoalValue(newValue);
                            coalValueMapper.updateById(coalValue);
                        }
                    }
                }
            }
        }
        return officialInventoryMapper.updateById(officialInventory);
    }
@@ -120,6 +231,8 @@
                .map(OI -> {
                    OfficialInventoryVo vo = new OfficialInventoryVo();
                    BeanUtils.copyProperties(OI, vo);
                    CoalInfo coalInfo = coalInfoMapper.selectById(OI.getCoalId());
                    vo.setCoal(coalInfo.getCoal());
                    return vo;
                })
                .collect(Collectors.toList());
@@ -155,8 +268,10 @@
        // 2. 插入新库存记录
        OfficialInventory officialInventory = new OfficialInventory();
        BeanUtils.copyProperties(officialInventoryDto, officialInventory);
        officialInventory.setId(null);
        officialInventory.setMergeId(ids.toString());
        officialInventory.setRegistrantId(SecurityUtils.getLoginUser().getUser().getUserName());
        officialInventory.setSupplierId(officialInventoryDto.getSupplierId());
        officialInventory.setRegistrantId(SecurityUtils.getLoginUser().getUser().getUserId());
        if (officialInventoryMapper.insert(officialInventory) <= 0) {
            throw new BaseException("库存记录创建失败");
        }
@@ -217,4 +332,26 @@
        }
    }
    @Override
    public Map<String, BigDecimal> selectOfficialAllInfo() {
        // 1. 查询 official_inventory 表数据
        List<OfficialInventory> officialInventories = officialInventoryMapper.selectList(null);
        // 用于存储最终结果,key 为煤种名称,value 为库存数量拼接“吨”
        Map<String, BigDecimal> resultMap = new LinkedHashMap<>();
        // 2. 遍历查询结果,关联 coalInfo 获取煤种名称并组装数据
        for (OfficialInventory inventory : officialInventories) {
            Long coalId = inventory.getCoalId();
            // 根据 coalId 到 coalInfoMapper 查询煤种名称
            CoalInfo coalInfo = coalInfoMapper.selectById(coalId);
            if (coalInfo != null) {
                String coalName = coalInfo.getCoal(); // 假设 CoalInfo 有 getCoalName 方法获取煤种名称
                BigDecimal quantity = inventory.getInventoryQuantity();
                resultMap.put(coalName, quantity);
            }
        }
        return resultMap;
    }
}