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/OfficialInventoryServiceImpl.java | 308 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 304 insertions(+), 4 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 fdc9186..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
@@ -1,15 +1,34 @@
package com.ruoyi.business.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
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.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;
import com.ruoyi.business.service.OfficialInventoryService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
+import com.ruoyi.business.vo.OfficialInventoryVo;
+import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.bean.BeanUtils;
import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
/**
* <p>
@@ -25,9 +44,290 @@
private final OfficialInventoryMapper officialInventoryMapper;
+ private final CoalValueMapper coalValueMapper;
+
+ private final CoalFieldMapper coalFieldMapper;
+
+ private final CoalInfoMapper coalInfoMapper;
+
+ private final SupplyMapper supplyMapper;
+
+
@Override
- public IPage<OfficialInventory> selectOfficialInventoryList(Page page, OfficialInventoryDto officialInventoryDto) {
+ public IPage<OfficialInventoryDto> selectOfficialInventoryList(Page page, OfficialInventoryDto officialInventoryDto) {
+
+ // 鍏堟煡鍑哄師濮嬫暟鎹紙OfficialInventory锛�
LambdaQueryWrapper<OfficialInventory> queryWrapper = new LambdaQueryWrapper<>();
- return officialInventoryMapper.selectPage(page, queryWrapper);
+ queryWrapper.orderByAsc(OfficialInventory::getCreateTime);
+ IPage<OfficialInventory> entityPage = officialInventoryMapper.selectPage(page, queryWrapper);
+
+ // 鍒涘缓涓�涓柊鐨� Dto 鍒嗛〉缁撴灉
+ IPage<OfficialInventoryDto> dtoPage = new Page<>();
+ BeanUtils.copyProperties(entityPage, dtoPage);
+
+ 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()
+ .map(CoalField::getFields)
+ .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>()
+ .eq(CoalValue::getPlanId, entity.getPendingId())
+ .and(wrapper -> wrapper.ne(CoalValue::getType, "2").or().isNull(CoalValue::getType))
+ );
+ } else {
+ coalValues = coalValueMapper.selectList(new LambdaQueryWrapper<CoalValue>()
+ .eq(CoalValue::getPlanId, entity.getId())
+ .eq(CoalValue::getType, "2")
+ );
+ }
+
+ // 鏋勫缓 Map<fieldName, value>
+ Map<String, String> fieldValueMap = coalValues.stream()
+ .collect(Collectors.toMap(
+ CoalValue::getFields,
+ CoalValue::getCoalValue,
+ (existing, replacement) -> existing // 閲嶅瀛楁淇濈暀绗竴涓�
+ ));
+
+ // 鏋勯�犳渶缁� fields 鍒楄〃锛屽寘鍚墍鏈夊瓧娈靛悕锛屽苟璁剧疆榛樿鍊� "-"
+ List<Map<String, String>> fields = new ArrayList<>();
+ for (String field : allFieldNames) {
+ Map<String, String> fieldMap = new HashMap<>();
+ fieldMap.put(field, fieldValueMap.getOrDefault(field, "-"));
+ fields.add(fieldMap);
+ }
+
+ // 璁剧疆Coal淇℃伅
+ CoalInfo coalInfo = coalInfoMap.get(entity.getCoalId());
+ if (coalInfo != null) {
+ dto.setCoal(coalInfo.getCoal());
+ }
+
+ // 璁剧疆鍒� DTO 涓�
+ dto.setFields(fields);
+ dtoList.add(dto);
+ }
+
+ dtoPage.setRecords(dtoList); // 璁剧疆杞崲鍚庣殑 DtoList
+ return dtoPage;
}
+
+ @Override
+ 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);
+ }
+
+ @Override
+ public List<OfficialInventoryVo> selectOfficialList(OfficialInventoryVo officialInventoryVo) {
+ List<OfficialInventory> officialInventories = officialInventoryMapper.selectList(null);
+ return officialInventories.stream()
+ .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
+ @Override
+ public int mergeAll(OfficialInventoryDto officialInventoryDto) {
+ List<Long> ids = officialInventoryDto.getIds();
+
+ // 鏍¢獙鍙傛暟
+ if (CollectionUtils.isEmpty(ids) || ids.size() < 2) {
+ throw new BaseException("璇烽�変腑鑷冲皯涓ゆ潯鏁版嵁");
+ }
+ if (CollectionUtils.isEmpty(officialInventoryDto.getFields())) {
+ throw new BaseException("瀛楁鍊间笉鑳戒负绌�");
+ }
+
+ // 1. 鎵归噺鏍囪鍒犻櫎鏃ф暟鎹�
+ LambdaUpdateWrapper<OfficialInventory> updateWrapper = new LambdaUpdateWrapper<>();
+ updateWrapper.in(OfficialInventory::getId, ids)
+ .set(OfficialInventory::getDeleted, 1);
+ int rowsAffected = officialInventoryMapper.update(null, updateWrapper);
+ if (rowsAffected == 0) {
+ throw new BaseException("鏈壘鍒板尮閰嶇殑鏁版嵁锛岃纭閫夋嫨鏄惁姝g‘");
+ }
+
+ // 2. 鎻掑叆鏂板簱瀛樿褰�
+ OfficialInventory officialInventory = new OfficialInventory();
+ BeanUtils.copyProperties(officialInventoryDto, officialInventory);
+ officialInventory.setId(null);
+ officialInventory.setMergeId(ids.toString());
+ officialInventory.setSupplierId(officialInventoryDto.getSupplierId());
+ officialInventory.setRegistrantId(SecurityUtils.getLoginUser().getUser().getUserId());
+ if (officialInventoryMapper.insert(officialInventory) <= 0) {
+ throw new BaseException("搴撳瓨璁板綍鍒涘缓澶辫触");
+ }
+
+ // 3. 鎵归噺澶勭悊瀛楁鍊�
+ batchProcessCoalValues(officialInventory.getId(), officialInventoryDto.getFields());
+
+ return rowsAffected;
+ }
+
+ private void batchProcessCoalValues(Long planId, List<Map<String, String>> fields) {
+ // 1. 鎻愬彇鎵�鏈夊敮涓�瀛楁鏍囪瘑
+ Set<String> allFields = fields.stream()
+ .flatMap(map -> map.keySet().stream())
+ .collect(Collectors.toSet());
+
+ // 2. 鏌ヨ瀛楁鏄犲皠鍏崇郴
+ 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
+ ));
+
+ // 3. 鏋勯�犲苟鎻掑叆姣忔潯璁板綍
+ CoalValue coalValueTemplate = new CoalValue();
+ coalValueTemplate.setPlanId(planId);
+ coalValueTemplate.setType("2");
+
+ for (Map<String, String> fieldMapEntry : fields) {
+ 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("瀛楁鍚嶄笉瀛樺湪: " + key);
+ }
+
+ CoalValue coalValue = new CoalValue();
+ BeanUtils.copyProperties(coalValueTemplate, coalValue); // 澶嶇敤妯℃澘灞炴��
+ coalValue.setId(null);
+ coalValue.setCoalValue(value);
+ coalValue.setType("2");
+ coalValue.setPlanId(planId);
+ coalValue.setFields(key);
+ coalValue.setFieldName(fieldName);
+
+ // 鍗曟潯鎻掑叆
+ int result = coalValueMapper.insert(coalValue);
+ if (result <= 0) {
+ throw new BaseException("瀛楁鍊间繚瀛樺け璐ワ紝瀛楁锛�" + key);
+ }
+ }
+ }
+ }
+
}
--
Gitblit v1.9.3