From 88e10f5656a0ad5530a9e37892fb327153d9dc8a Mon Sep 17 00:00:00 2001
From: baoshiwei <baoshiwei@shlanbao.cn>
Date: 星期五, 27 六月 2025 13:25:35 +0800
Subject: [PATCH] feat(eims): 优化保养报表状态展示

---
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsSpareInoutServiceImpl.java |  108 +++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 103 insertions(+), 5 deletions(-)

diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsSpareInoutServiceImpl.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsSpareInoutServiceImpl.java
index d58fa5b..28f0446 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsSpareInoutServiceImpl.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsSpareInoutServiceImpl.java
@@ -1,5 +1,7 @@
 package org.dromara.eims.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.dromara.common.core.constant.DictConstants;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -8,16 +10,24 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
+import org.dromara.eims.domain.EimsSpare;
+import org.dromara.eims.domain.EimsSpareInoutdt;
+import org.dromara.eims.domain.bo.EimsSpareBo;
+import org.dromara.eims.domain.vo.EimsSpareInoutdtVo;
+import org.dromara.eims.domain.vo.EimsSpareVo;
+import org.dromara.eims.mapper.EimsSpareInoutdtMapper;
+import org.dromara.eims.mapper.EimsSpareMapper;
 import org.springframework.stereotype.Service;
 import org.dromara.eims.domain.bo.EimsSpareInoutBo;
 import org.dromara.eims.domain.vo.EimsSpareInoutVo;
 import org.dromara.eims.domain.EimsSpareInout;
 import org.dromara.eims.mapper.EimsSpareInoutMapper;
 import org.dromara.eims.service.IEimsSpareInoutService;
+import org.springframework.transaction.annotation.Transactional;
 
-import java.util.List;
-import java.util.Map;
-import java.util.Collection;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 澶囦欢鍑哄叆搴揝ervice涓氬姟灞傚鐞�
@@ -30,6 +40,8 @@
 public class EimsSpareInoutServiceImpl implements IEimsSpareInoutService {
 
     private final EimsSpareInoutMapper baseMapper;
+    private final EimsSpareInoutdtMapper inoutdtMapper;
+    private final EimsSpareMapper spareMapper;
 
     /**
      * 鏌ヨ澶囦欢鍑哄叆搴�
@@ -39,7 +51,33 @@
      */
     @Override
     public EimsSpareInoutVo queryById(Long id){
-        return baseMapper.selectVoById(id);
+        EimsSpareInoutVo eimsSpareInoutVo = baseMapper.selectVoById(id);
+        QueryWrapper<EimsSpareInoutdt> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(EimsSpareInoutdt::getInoutId, id);
+        List<EimsSpareInoutdtVo> dtVos = inoutdtMapper.selectVoList(queryWrapper);
+        if(!dtVos.isEmpty()){
+            Map<Long, Long> map = dtVos.stream()
+                .collect(Collectors.toMap(
+                    EimsSpareInoutdtVo::getSpareId,
+                    EimsSpareInoutdtVo::getQuantity
+                ));
+            List<Long> spareIdList = dtVos.stream()
+                .map(EimsSpareInoutdtVo::getSpareId) // 鑾峰彇 spareId 瀛楁
+                .toList();
+
+            List<EimsSpareVo> eimsSpareListVos = spareMapper.selectVoBatchIds(spareIdList);
+
+            for (EimsSpareVo spareVo : eimsSpareListVos) {
+                // 鍋囪 quantity 鐨勫�兼槸涓�涓浐瀹氬�硷紙渚嬪 10锛�
+                spareVo.setQuantity(map.get(spareVo.getId()));
+            }
+
+            eimsSpareInoutVo.setSpareList(eimsSpareListVos);
+        }
+
+
+
+        return eimsSpareInoutVo;
     }
 
     /**
@@ -55,6 +93,7 @@
         Page<EimsSpareInoutVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
         return TableDataInfo.build(result);
     }
+
 
     /**
      * 鏌ヨ绗﹀悎鏉′欢鐨勫浠跺嚭鍏ュ簱鍒楄〃
@@ -81,20 +120,77 @@
         return lqw;
     }
 
+
     /**
      * 鏂板澶囦欢鍑哄叆搴�
      *
      * @param bo 澶囦欢鍑哄叆搴�
      * @return 鏄惁鏂板鎴愬姛
      */
+    @Transactional(rollbackFor = Exception.class)
     @Override
-    public Boolean insertByBo(EimsSpareInoutBo bo) {
+    public synchronized Boolean insertByBo(EimsSpareInoutBo bo) {
         EimsSpareInout add = MapstructUtils.convert(bo, EimsSpareInout.class);
         validEntityBeforeSave(add);
         boolean flag = baseMapper.insert(add) > 0;
         if (flag) {
             bo.setId(add.getId());
         }
+        // 鍏ュ簱锛嬪簱瀛�  鍑哄簱-搴撳瓨  锛堥粯璁ゅ叆搴擄級
+        int OperationType = bo.getType().equals(DictConstants.SPARE_INOUT_TYPE_DETAIL.CK) ? -1 : 1;
+
+        List<EimsSpareBo> spareList = Optional.ofNullable(bo.getSpareList()).orElse(new ArrayList<>());
+
+        // 鍚堝苟涓ゆ寰幆涓轰竴娆″惊鐜�
+        List<EimsSpareInoutdt> dtList = new ArrayList<>();
+        List<EimsSpare> updateSpareList = new ArrayList<>();
+
+        for (EimsSpareBo eimsSpareBo : spareList) {
+            EimsSpare spare = spareMapper.selectById(eimsSpareBo.getId());
+            if (spare == null) {
+                spare = new EimsSpare();
+                spare.setName(eimsSpareBo.getName());
+                spare.setCode(eimsSpareBo.getCode());
+                spare.setActualStock(100L);
+                spareMapper.insert(spare);
+                eimsSpareBo.setId(spare.getId());
+            }
+
+            // 鎻掑叆鍑哄簱鏄庣粏
+            EimsSpareInoutdt dt = new EimsSpareInoutdt();
+            dt.setInoutId(add.getId());
+            dt.setSpareId(spare.getId());
+            dt.setBeforeStock(spare.getActualStock());
+            dt.setActualStock(spare.getActualStock() + (eimsSpareBo.getQuantity() * OperationType));
+            dt.setQuantity(eimsSpareBo.getQuantity());
+
+            // 璁剧疆鍗曚环鍜岄噾棰�
+            Optional.ofNullable(spare.getReferPrice()).ifPresent(referPrice -> {
+                dt.setUnitPrice(referPrice);
+                dt.setAmount(referPrice.multiply(BigDecimal.valueOf(eimsSpareBo.getQuantity())));
+            });
+            dtList.add(dt);
+
+            // 鏇存柊澶囦欢搴撳瓨
+            EimsSpare updatedSpare = new EimsSpare();
+            updatedSpare.setId(spare.getId());
+            updatedSpare.setActualStock(spare.getActualStock() + (eimsSpareBo.getQuantity() * OperationType));
+            Optional.ofNullable(spare.getReferPrice()).ifPresent(referPrice -> {
+                updatedSpare.setStockAmount(referPrice.multiply(BigDecimal.valueOf(updatedSpare.getActualStock())));
+            });
+            updateSpareList.add(updatedSpare);
+        }
+
+        // 鎵归噺鎻掑叆鏁版嵁
+        if (!dtList.isEmpty()) {
+            inoutdtMapper.insertBatch(dtList);
+        }
+
+        // 鎵归噺鏇存柊澶囦欢搴撳瓨
+        if (!updateSpareList.isEmpty()) {
+            spareMapper.updateBatchById(updateSpareList);
+        }
+
         return flag;
     }
 
@@ -132,4 +228,6 @@
         }
         return baseMapper.deleteByIds(ids) > 0;
     }
+
+
 }

--
Gitblit v1.9.3