From bb79260cbeeac88cfbadc9606eea57002e8945bc Mon Sep 17 00:00:00 2001
From: baoshiwei <baoshiwei@shlanbao.cn>
Date: 星期四, 17 四月 2025 09:43:16 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/main'

---
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsSpareInoutServiceImpl.java |  105 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 100 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..334eb44 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,19 +120,73 @@
         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;
+
+         //鍑哄簱
+         if(bo.getType().equals(DictConstants.SPARE_INOUT_TYPE_DETAIL.CK)){
+            OperationType =  -1;
+        } else {
+             OperationType = 1;
+         }
+
+        List<EimsSpareBo> spareList = Optional.ofNullable(bo.getSpareList()).orElse(new ArrayList<>());
+        // 鎻掑叆鍑哄簱鏄庣粏
+        List<EimsSpareInoutdt> dtList = spareList.stream()
+            .map(eimsSpareBo -> {
+                EimsSpareInoutdt dt = new EimsSpareInoutdt();
+                dt.setInoutId(add.getId());
+                dt.setSpareId(eimsSpareBo.getId());
+                dt.setBeforeStock(eimsSpareBo.getActualStock());
+                // 娉ㄦ剰鍏ュ簱鍑哄簱
+                dt.setActualStock(eimsSpareBo.getActualStock() + (eimsSpareBo.getQuantity() * OperationType));
+                dt.setQuantity(eimsSpareBo.getQuantity());
+
+                // 璁剧疆鍗曚环鍜岄噾棰�
+                Optional.ofNullable(eimsSpareBo.getReferPrice()).ifPresent(referPrice -> {
+                    dt.setUnitPrice(referPrice);
+                    dt.setAmount(referPrice.multiply(BigDecimal.valueOf(eimsSpareBo.getQuantity())));
+                });
+
+                return dt;
+            })
+            .toList();
+
+        // 鎵归噺鎻掑叆鏁版嵁
+        if (!dtList.isEmpty()) {
+            inoutdtMapper.insertBatch(dtList);
+        }
+
+        // 鏇存柊澶囦欢鐨勫簱瀛�
+        List<EimsSpare> updateSpareList = spareList.stream().map(spareBo -> {
+            EimsSpare spare = new EimsSpare();
+            spare.setId(spareBo.getId());
+            spare.setActualStock(spareBo.getActualStock() + (spareBo.getQuantity() * OperationType));
+            // 璁剧疆鍗曚环鍜岄噾棰�
+            Optional.ofNullable(spareBo.getReferPrice()).ifPresent(referPrice -> {
+                spare.setStockAmount(referPrice.multiply(BigDecimal.valueOf(spare.getActualStock())));
+            });
+            return spare;
+        }).toList();
+
+        if (!updateSpareList.isEmpty()) {
+            spareMapper.updateBatchById(updateSpareList);
         }
         return flag;
     }
@@ -132,4 +225,6 @@
         }
         return baseMapper.deleteByIds(ids) > 0;
     }
+
+
 }

--
Gitblit v1.9.3