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