From 49e1bc66ebaf696ebd3fc3ed33d65c8795fd3cde Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期二, 01 七月 2025 18:05:12 +0800
Subject: [PATCH] 1.巡检定时任务 2.设备管理 3.文档查询
---
main-business/src/main/java/com/ruoyi/business/service/impl/PendingInventoryServiceImpl.java | 197 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 194 insertions(+), 3 deletions(-)
diff --git a/main-business/src/main/java/com/ruoyi/business/service/impl/PendingInventoryServiceImpl.java b/main-business/src/main/java/com/ruoyi/business/service/impl/PendingInventoryServiceImpl.java
index ac74173..412e7bb 100644
--- a/main-business/src/main/java/com/ruoyi/business/service/impl/PendingInventoryServiceImpl.java
+++ b/main-business/src/main/java/com/ruoyi/business/service/impl/PendingInventoryServiceImpl.java
@@ -3,19 +3,35 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
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.mapper.CoalFieldMapper;
+import com.ruoyi.basic.mapper.CoalInfoMapper;
import com.ruoyi.basic.mapper.CoalValueMapper;
import com.ruoyi.business.dto.PendingInventoryDto;
+import com.ruoyi.business.entity.OfficialInventory;
import com.ruoyi.business.entity.PendingInventory;
+import com.ruoyi.business.mapper.OfficialInventoryMapper;
import com.ruoyi.business.mapper.PendingInventoryMapper;
+import com.ruoyi.business.service.InputInventoryRecordService;
+import com.ruoyi.business.service.InventorySummaryService;
import com.ruoyi.business.service.PendingInventoryService;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.bean.BeanUtils;
+import com.ruoyi.system.mapper.SysUserMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
-import java.util.Objects;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
/**
* <p>
@@ -31,15 +47,114 @@
private final PendingInventoryMapper pendingInventoryMapper;
+ private final OfficialInventoryMapper officialInventoryMapper;
+
private final CoalValueMapper coalValueMapper;
private final CoalFieldMapper coalFieldMapper;
+ private final CoalInfoMapper coalInfoMapper;
+
+ private final SysUserMapper sysUserMapper;
+
+ private final InputInventoryRecordService inputInventoryRecordService;
+
+ private final InventorySummaryService inventorySummaryService;
+
@Override
- public IPage<PendingInventory> selectPendingInventoryList(Page page, PendingInventoryDto pendingInventoryDto) {
+ public IPage<PendingInventoryDto> selectPendingInventoryList(Page page, PendingInventoryDto pendingInventoryDto) {
+ // 1. 鏋勫缓涓绘煡璇�
LambdaQueryWrapper<PendingInventory> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.orderByDesc(PendingInventory::getCreateTime);
- return pendingInventoryMapper.selectPage(page, queryWrapper);
+
+ // 2. 鎵ц涓昏〃鍒嗛〉鏌ヨ
+ IPage<PendingInventory> pendingInventoryPage = pendingInventoryMapper.selectPage(page, queryWrapper);
+
+ // 3. 鏃犳暟鎹揩閫熻繑鍥�
+ if (CollectionUtils.isEmpty(pendingInventoryPage.getRecords())) {
+ return new Page<>(page.getCurrent(), page.getSize(), pendingInventoryPage.getTotal());
+ }
+
+ // 4. 鎻愬彇鎵�鏈夊緟澶勭悊搴撳瓨ID
+ List<Long> pendingIds = pendingInventoryPage.getRecords().stream()
+ .map(PendingInventory::getId)
+ .collect(Collectors.toList());
+
+ // 5. 鎵归噺鏌ヨ鍏宠仈鐨勭叅鐐俊鎭拰姝e紡搴撳瓨淇℃伅
+ List<Long> coalIds = pendingInventoryPage.getRecords().stream()
+ .map(PendingInventory::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<>();
+ }
+
+ // 5. 鎵归噺鏌ヨ鐧昏浜篿d
+ List<Long> registrantIds = pendingInventoryPage.getRecords().stream()
+ .map(PendingInventory::getRegistrantId)
+ .distinct()
+ .toList();
+ // 鎵归噺鏌ヨ鐧昏浜�
+ Map<Long, SysUser> sysUserMap;
+ if (!registrantIds.isEmpty()) {
+ List<SysUser> sysUsers = sysUserMapper.selectList(registrantIds);
+ sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, Function.identity()));
+ } else {
+ sysUserMap = new HashMap<>();
+ }
+
+ // 鎵归噺鏌ヨ姝e紡搴撳瓨淇℃伅
+ Map<Long, Long> pendingToOfficialMap = getOfficialInventoryMap(pendingIds);
+
+ // 6. 杞崲DTO骞惰缃浉鍏冲瓧娈�
+ return pendingInventoryPage.convert(record -> {
+ PendingInventoryDto dto = new PendingInventoryDto();
+ BeanUtils.copyProperties(record, dto);
+
+ // 璁剧疆Coal淇℃伅
+ CoalInfo coalInfo = coalInfoMap.get(record.getCoalId());
+ if (coalInfo != null) {
+ dto.setCoal(coalInfo.getCoal());
+ }
+
+ // 璁剧疆鐧昏浜�
+ SysUser sysUser = sysUserMap.get(record.getRegistrantId());
+ if (sysUser != null) {
+ dto.setRegistrant(sysUser.getNickName());
+ }
+
+ // 浠庨鍔犺浇鐨凪ap涓幏鍙杘fficialId
+ dto.setOfficialId(pendingToOfficialMap.getOrDefault(record.getId(), null));
+
+ return dto;
+ });
+ }
+
+
+ // 鎵归噺鑾峰彇寰呭鐞嗗簱瀛樹笌姝e紡搴撳瓨鐨勬槧灏勫叧绯�
+ private Map<Long, Long> getOfficialInventoryMap(List<Long> pendingIds) {
+ if (CollectionUtils.isEmpty(pendingIds)) {
+ return Collections.emptyMap();
+ }
+
+ // 鏌ヨ鍏宠仈鐨勬寮忓簱瀛樻暟鎹�
+ LambdaQueryWrapper<OfficialInventory> wrapper = new LambdaQueryWrapper<>();
+ wrapper.select(OfficialInventory::getId, OfficialInventory::getPendingId)
+ .in(OfficialInventory::getPendingId, pendingIds);
+
+ return officialInventoryMapper.selectList(wrapper)
+ .stream()
+ .collect(Collectors.toMap(
+ OfficialInventory::getPendingId,
+ OfficialInventory::getId,
+ (existing, replacement) -> existing // 濡傛灉鏈夐噸澶嶏紝淇濈暀绗竴涓�
+ ));
}
@Override
@@ -66,4 +181,80 @@
// 鎵ц鎵归噺閫昏緫鍒犻櫎
return pendingInventoryMapper.update(null, updateWrapper);
}
+
+ @Transactional
+ @Override
+ public int addOrEditCoalValue(PendingInventoryDto pendingInventoryDto) {
+ // Step 1: 鍒犻櫎鍘熸湁 planId 鐩稿叧鏁版嵁
+ coalValueMapper.delete(new LambdaQueryWrapper<CoalValue>()
+ .eq(CoalValue::getPlanId, pendingInventoryDto.getPId()));
+ // Step 2: 鏋勫缓鍩虹 CoalValue 瀵硅薄
+ CoalValue coalValue = new CoalValue();
+ BeanUtils.copyProperties(coalValue, pendingInventoryDto);
+ coalValue.setPlanId(pendingInventoryDto.getPId());
+ List<Map<String, String>> fieldValue = pendingInventoryDto.getFieldValue();
+ if (CollectionUtils.isEmpty(fieldValue)) {
+ throw new BaseException("瀛楁鍊间笉鑳戒负绌�");
+ }
+ // Step 3: 鎻愬墠鑾峰彇鎵�鏈� field -> CoalField 鏄犲皠锛岄伩鍏嶉噸澶嶆煡搴�
+ Set<String> allFields = fieldValue.stream()
+ .flatMap(map -> map.keySet().stream())
+ .collect(Collectors.toSet());
+ List<CoalField> coalFields = coalFieldMapper.selectList(
+ new LambdaQueryWrapper<CoalField>().in(CoalField::getFields, allFields));
+ Map<String, String> fieldMap = coalFields.stream()
+ .collect(Collectors.toMap(
+ CoalField::getFields,
+ CoalField::getFieldName));
+ // Step 4: 鎵归噺鎻掑叆
+ int i = 0;
+ for (Map<String, String> fieldMapEntry : fieldValue) {
+ for (Map.Entry<String, String> entry : fieldMapEntry.entrySet()) {
+ String key = entry.getKey();
+ String value = entry.getValue();
+ String fieldName = fieldMap.get(key);
+ if (fieldName == null) {
+ throw new BaseException("瀛楁鍚嶄笉瀛樺湪");
+ }
+ coalValue.setId(null); // 娓呯┖ id锛岀‘淇濇瘡娆¢兘鏄柊璁板綍
+ coalValue.setCoalValue(value);
+ coalValue.setFields(key);
+ coalValue.setFieldName(fieldName);
+ coalValue.setType(String.valueOf(1));
+ i = coalValueMapper.insert(coalValue);
+ }
+ }
+ if (i > 0) {
+ BigDecimal quantity = pendingInventoryDto.getInventoryQuantity();
+ PendingInventory pendingInventory = pendingInventoryMapper.selectById(pendingInventoryDto.getPId());
+ if (pendingInventory == null) {
+ throw new BaseException("寰呭叆搴撹褰曚笉瀛樺湪");
+ }
+ BigDecimal left = pendingInventory.getInventoryQuantity().subtract(quantity);
+ if (left.compareTo(BigDecimal.ZERO) > 0) {
+ pendingInventory.setInventoryQuantity(left);
+ pendingInventory.setCoalPlanId(pendingInventoryDto.getCoalPlanId());
+ pendingInventoryMapper.updateById(pendingInventory);
+ } else {
+ pendingInventoryMapper.deleteById(pendingInventoryDto.getPId());
+ }
+ //姝e紡搴�
+ if (pendingInventoryDto.getOfficialId() == null) {
+ OfficialInventory officialInventory = new OfficialInventory();
+ BeanUtils.copyProperties(pendingInventory, officialInventory);
+ officialInventory.setId(null);
+ officialInventory.setCoalPlanId(pendingInventoryDto.getCoalPlanId());
+ officialInventory.setPendingId(pendingInventoryDto.getPId());
+ officialInventory.setInventoryQuantity(quantity);
+ officialInventory.setRegistrantId(1L);
+ officialInventory.setSupplierId(pendingInventoryDto.getSupplierId());
+ officialInventoryMapper.insert(officialInventory);
+ } else {
+ OfficialInventory officialInventory = officialInventoryMapper.selectById(pendingInventoryDto.getOfficialId());
+ officialInventory.setInventoryQuantity(quantity.add(officialInventory.getInventoryQuantity()));
+ officialInventoryMapper.updateById(officialInventory);
+ }
+ }
+ return i;
+ }
}
--
Gitblit v1.9.3