From 1d2933b4209f891d7dbd431ba44577c7d5e5eef4 Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期一, 22 九月 2025 11:40:18 +0800
Subject: [PATCH] yys 配置文件修改
---
main-business/src/main/java/com/ruoyi/business/service/impl/OfficialInventoryServiceImpl.java | 283 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 280 insertions(+), 3 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 ceafff7..be1daf3 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
@@ -15,18 +15,30 @@
import com.ruoyi.basic.mapper.CoalValueMapper;
import com.ruoyi.basic.mapper.SupplyMapper;
import com.ruoyi.business.dto.OfficialInventoryDto;
+import com.ruoyi.business.dto.SalesRecordDto;
import com.ruoyi.business.entity.OfficialInventory;
+import com.ruoyi.business.entity.SalesRecord;
import com.ruoyi.business.mapper.OfficialInventoryMapper;
import com.ruoyi.business.service.OfficialInventoryService;
+import com.ruoyi.business.utils.DynamicExcelUtil;
+import com.ruoyi.business.vo.OfficialInventoryExportVo;
import com.ruoyi.business.vo.OfficialInventoryVo;
+import com.ruoyi.business.vo.SalesRecordExportVo;
+import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.system.mapper.SysUserMapper;
+import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
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;
@@ -39,6 +51,7 @@
* @since 2025-06-04
*/
@Service
+@Slf4j
@RequiredArgsConstructor
public class OfficialInventoryServiceImpl extends ServiceImpl<OfficialInventoryMapper, OfficialInventory> implements OfficialInventoryService {
@@ -52,9 +65,11 @@
private final SupplyMapper supplyMapper;
+ private final SysUserMapper sysUserMapper;
+
@Override
- public IPage<OfficialInventoryDto> selectOfficialInventoryList(Page page, OfficialInventoryDto officialInventoryDto) {
+ public IPage<OfficialInventoryDto> selectOfficialInventoryList(Page<OfficialInventory> page, OfficialInventoryDto officialInventoryDto) {
// 鍏堟煡鍑哄師濮嬫暟鎹紙OfficialInventory锛�
LambdaQueryWrapper<OfficialInventory> queryWrapper = new LambdaQueryWrapper<>();
@@ -71,6 +86,10 @@
.map(OfficialInventory::getSupplierId)
.toList();
+ List<Long> registrantIds = entityPage.getRecords().stream()
+ .map(OfficialInventory::getRegistrantId)
+ .toList();
+
Map<Long, Supply> supplyMap;
if (!supplierIds.isEmpty()) {
List<Supply> infos = supplyMapper.selectList(new LambdaQueryWrapper<Supply>().in(Supply::getId, supplierIds));
@@ -79,19 +98,27 @@
supplyMap = new HashMap<>();
}
+ //鐧昏浜�
+ Map<Long, SysUser> userMap;
+ if (!registrantIds.isEmpty()) {
+ List<SysUser> sysUsers = sysUserMapper.selectList(registrantIds);
+ userMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity()));
+ } else {
+ userMap = new HashMap<>();
+ }
// 鏌ヨ鎵�鏈夊彲鐢ㄥ瓧娈碉紙CoalField锛�
List<CoalField> coalFields = coalFieldMapper.selectList(null);
List<String> allFieldNames = coalFields.stream()
.map(CoalField::getFields)
.distinct()
- .collect(Collectors.toList());
+ .toList();
//鏌ヨ鐓ょids
List<Long> coalIds = entityPage.getRecords().stream()
.map(OfficialInventory::getCoalId)
.distinct()
- .collect(Collectors.toList());
+ .toList();
// 鎵归噺鏌ヨCoalInfo
Map<Long, CoalInfo> coalInfoMap;
@@ -111,6 +138,12 @@
Supply supply = supplyMap.get(entity.getSupplierId());
if (supply != null) {
dto.setSupplierName(supply.getSupplierName());
+ }
+
+ // 鐧昏浜�
+ SysUser sysUser = userMap.get(entity.getRegistrantId());
+ if (sysUser != null) {
+ dto.setRegistrant(sysUser.getNickName());
}
List<CoalValue> coalValues;
@@ -330,4 +363,248 @@
}
}
+ @Override
+ public void officialInventoryExport(HttpServletResponse response, OfficialInventoryDto officialInventoryDto) {
+ try {
+ // 鑾峰彇鐓よ川瀛楁閰嶇疆
+ List<CoalField> allCoalFields = coalFieldMapper.selectList(null);
+ List<String> dynamicHeaders = allCoalFields.stream()
+ .map(CoalField::getFieldName)
+ .collect(Collectors.toList());
+
+ // 鑾峰彇鏁版嵁
+ List<OfficialInventory> list = officialInventoryDto.getExportIds() != null && !officialInventoryDto.getExportIds().isEmpty()
+ ? officialInventoryMapper.selectByIds(officialInventoryDto.getExportIds())
+ : officialInventoryMapper.selectList(null);
+
+ // 杞崲涓哄鍑篤O
+ List<OfficialInventoryExportVo> exportData = convertToExportVo(list, allCoalFields);
+
+ // 浣跨敤澧炲己鐨凟xcel宸ュ叿瀵煎嚭
+ DynamicExcelUtil<OfficialInventoryExportVo> util =
+ new DynamicExcelUtil<>(OfficialInventoryExportVo.class, dynamicHeaders);
+
+ // 瀵煎嚭Excel
+ util.exportExcel(response, exportData, "搴撳瓨鏁版嵁");
+
+ } catch (Exception e) {
+ log.error("搴撳瓨瀵煎嚭澶辫触", e);
+ // 鍙互鑰冭檻杩斿洖鏇村弸濂界殑閿欒淇℃伅缁欏墠绔�
+ throw new RuntimeException("瀵煎嚭澶辫触: " + e.getMessage());
+ }
+ }
+
+ private List<OfficialInventoryExportVo> convertToExportVo(List<OfficialInventory> list, List<CoalField> coalFields) {
+ if (CollectionUtils.isEmpty(list)) {
+ return Collections.emptyList();
+ }
+
+ // 鏀堕泦鎵�鏈夐渶瑕佹煡璇㈢殑ID
+ Set<Long> coalIds = list.stream()
+ .map(OfficialInventory::getCoalId)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toSet());
+
+ Set<Long> supplierIds = list.stream()
+ .map(OfficialInventory::getSupplierId)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toSet());
+
+ Set<Long> registrantIds = list.stream()
+ .map(OfficialInventory::getRegistrantId)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toSet());
+
+ Set<Long> planIds = list.stream()
+ .map(OfficialInventory::getCoalPlanId)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toSet());
+
+ // 鎵归噺鏌ヨ鍏宠仈鏁版嵁
+ Map<Long, CoalInfo> coalInfoMap = getCoalInfoMap(coalIds);
+ Map<Long, Supply> supplyMap = getSupplyMap(supplierIds);
+ Map<Long, SysUser> userMap = getUserMap(registrantIds);
+ Map<Long, List<CoalValue>> coalValuesMap = getCoalValuesMap(planIds);
+
+ // 鏋勫缓瀛楁ID鍒板瓧娈靛悕绉扮殑鏄犲皠锛屾彁楂樻煡鎵炬晥鐜�
+ Map<String, String> fieldIdToNameMap = coalFields.stream()
+ .collect(Collectors.toMap(CoalField::getFields, CoalField::getFieldName));
+
+ // 杞崲鏁版嵁
+ return list.stream().map(record -> {
+ OfficialInventoryExportVo vo = new OfficialInventoryExportVo();
+ vo.initDynamicFields(); // 鍒濆鍖�
+
+ // 璁剧疆鍩虹灞炴��
+ BeanUtils.copyProperties(record, vo);
+
+ // 璁剧疆鍏宠仈淇℃伅
+ setCoalInfo(vo, record.getCoalId(), coalInfoMap);
+ setSupplierInfo(vo, record.getSupplierId(), supplyMap);
+ setUserMapInfo(vo, record.getRegistrantId(), userMap);
+
+ // 鍔ㄦ�佸瓧娈靛鐞�
+ if (record.getCoalPlanId() != null) {
+ List<CoalValue> values = coalValuesMap.getOrDefault(record.getCoalPlanId(), Collections.emptyList());
+ setDynamicFields(vo, values, fieldIdToNameMap);
+ }
+
+ return vo;
+ }).collect(Collectors.toList());
+ }
+
+ private void setCoalInfo(OfficialInventoryExportVo vo, Long coalId, Map<Long, CoalInfo> coalInfoMap) {
+ if (coalId != null && coalInfoMap.containsKey(coalId)) {
+ vo.setCoal(coalInfoMap.get(coalId).getCoal());
+ }
+ }
+
+ private void setSupplierInfo(OfficialInventoryExportVo vo, Long supplierId, Map<Long, Supply> supplyMap) {
+ if (supplierId != null && supplyMap.containsKey(supplierId)) {
+ vo.setSupplierName(supplyMap.get(supplierId).getSupplierName());
+ }
+ }
+
+ private void setUserMapInfo(OfficialInventoryExportVo vo, Long registrantId, Map<Long, SysUser> userMap) {
+ if (registrantId != null && userMap.containsKey(registrantId)) {
+ vo.setRegistrant(userMap.get(registrantId).getNickName());
+ }
+ }
+
+ private void setDynamicFields(OfficialInventoryExportVo vo, List<CoalValue> values, Map<String, String> fieldIdToNameMap) {
+ for (CoalValue value : values) {
+ String fieldName = fieldIdToNameMap.get(value.getFields());
+ if (fieldName != null) {
+ vo.getCoalQualityProperties().put(fieldName, value.getCoalValue());
+ }
+ }
+ }
+
+ private Map<Long, List<CoalValue>> getCoalValuesMap(Set<Long> planIds) {
+ if (CollectionUtils.isEmpty(planIds)) {
+ return Collections.emptyMap();
+ }
+
+ List<CoalValue> allValues = coalValueMapper.selectList(
+ new LambdaQueryWrapper<CoalValue>()
+ .in(CoalValue::getPlanId, planIds));
+
+ return allValues.stream()
+ .collect(Collectors.groupingBy(CoalValue::getPlanId));
+ }
+
+ private Map<Long, CoalInfo> getCoalInfoMap(Set<Long> coalIds) {
+ if (CollectionUtils.isEmpty(coalIds)) {
+ return Collections.emptyMap();
+ }
+ return coalInfoMapper.selectByIds(coalIds).stream()
+ .collect(Collectors.toMap(CoalInfo::getId, Function.identity()));
+ }
+
+ private Map<Long, Supply> getSupplyMap(Set<Long> supplierIds) {
+ if (CollectionUtils.isEmpty(supplierIds)) {
+ return Collections.emptyMap();
+ }
+ return supplyMapper.selectByIds(supplierIds).stream()
+ .collect(Collectors.toMap(Supply::getId, Function.identity()));
+ }
+
+ private Map<Long, SysUser> getUserMap(Set<Long> registrantIds) {
+ if (CollectionUtils.isEmpty(registrantIds)) {
+ return Collections.emptyMap();
+ }
+ return sysUserMapper.selectBatchIds(registrantIds).stream()
+ .collect(Collectors.toMap(SysUser::getUserId, Function.identity()));
+ }
+
+ @Override
+ public List<OfficialInventoryDto> coalBlendingList() {
+ // 1. 鏌ヨ鍩虹搴撳瓨鏁版嵁
+ List<OfficialInventory> officialInventories = officialInventoryMapper.selectList(null);
+ // 2. 鏀堕泦鎵�鏈夐渶瑕佹煡璇㈢殑ID
+ Set<Long> coalIds = new HashSet<>();
+ Set<Long> supplierIds = new HashSet<>();
+ Set<Long> planIds = new HashSet<>();
+
+ officialInventories.forEach(inventory -> {
+ coalIds.add(inventory.getCoalId());
+ supplierIds.add(inventory.getSupplierId());
+ planIds.add(inventory.getCoalPlanId());
+ });
+ // 3. 鎵归噺鏌ヨ鍏宠仈鏁版嵁
+ Map<Long, CoalInfo> coalInfoMap;
+ if (!coalIds.isEmpty()) {
+ coalInfoMap = coalInfoMapper.selectByIds(coalIds).stream()
+ .collect(Collectors.toMap(CoalInfo::getId, Function.identity()));
+ } else {
+ coalInfoMap = new HashMap<>();
+ }
+
+ Map<Long, Supply> supplyMap;
+ if (!supplierIds.isEmpty()) {
+ supplyMap = supplyMapper.selectByIds(supplierIds).stream()
+ .collect(Collectors.toMap(Supply::getId, Function.identity()));
+ } else {
+ supplyMap = new HashMap<>();
+ log.warn("supplierIds 涓虹┖锛岃烦杩囨煡璇� Supply");
+ }
+
+ Map<Long, List<CoalValue>> coalValuesMap;
+ if (!planIds.isEmpty()) {
+ coalValuesMap = coalValueMapper.selectList(
+ new LambdaQueryWrapper<CoalValue>().in(CoalValue::getPlanId, planIds))
+ .stream()
+ .collect(Collectors.groupingBy(CoalValue::getPlanId));
+ } else {
+ coalValuesMap = new HashMap<>();
+ log.warn("planIds 涓虹┖锛岃烦杩囨煡璇� CoalValue");
+ }
+ // 4. 缁勮DTO
+ return officialInventories.stream()
+ .map(inventory -> {
+ OfficialInventoryDto dto = new OfficialInventoryDto();
+ BeanUtils.copyProperties(inventory, dto);
+ // 璁剧疆鐓ょ淇℃伅
+ CoalInfo coalInfo = coalInfoMap.get(inventory.getCoalId());
+ Supply supply = supplyMap.get(inventory.getSupplierId());
+ if (coalInfo != null && supply != null) {
+ dto.setSupplierCoal(supply.getSupplierName() + " - " + coalInfo.getCoal());
+ }
+ // 璁剧疆鐓よ川鏁版嵁
+ dto.setCoalValues(coalValuesMap.getOrDefault(inventory.getCoalPlanId(), Collections.emptyList())
+ .stream()
+ .map(coalValue -> {
+ Map<String, String> map = new HashMap<>();
+ map.put("fieldName", coalValue.getFieldName());
+ map.put("coalValue", coalValue.getCoalValue());
+ return map;
+ })
+ .collect(Collectors.toList()));
+ return dto;
+ })
+ .collect(Collectors.toList());
+ }
+
+ @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;
+ }
+
}
--
Gitblit v1.9.3