From bb5bf872de5e67d7b406e3a305c9dfcbd0f218a6 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期四, 26 六月 2025 18:03:55 +0800
Subject: [PATCH] 采购,正式库优化

---
 main-business/src/main/java/com/ruoyi/business/service/impl/OfficialInventoryServiceImpl.java |  121 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 120 insertions(+), 1 deletions(-)

diff --git a/main-business/src/main/java/com/ruoyi/business/service/impl/OfficialInventoryServiceImpl.java b/main-business/src/main/java/com/ruoyi/business/service/impl/OfficialInventoryServiceImpl.java
index f964ab8..ceafff7 100644
--- a/main-business/src/main/java/com/ruoyi/business/service/impl/OfficialInventoryServiceImpl.java
+++ b/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;
@@ -23,6 +27,7 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -43,12 +48,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 +67,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 +87,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 +142,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 +161,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. 鏌ヨ澶氫釜绗﹀悎鏉′欢鐨凜oalValue璁板綍
+            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(); // 鏁版嵁搴撲腑鐨刦ield 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. 鏌ヨ澶氫釜绗﹀悎鏉′欢鐨凜oalValue璁板綍
+            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(); // 鏁版嵁搴撲腑鐨刦ield 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,9 +229,16 @@
                 .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());
+    }
+
+    @Override
+    public List<OfficialInventory> selectOfficialAll() {
+        return officialInventoryMapper.selectList(null);
     }
 
     @Transactional
@@ -150,8 +266,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("搴撳瓨璁板綍鍒涘缓澶辫触");
         }
@@ -211,4 +329,5 @@
             }
         }
     }
+
 }

--
Gitblit v1.9.3