From df64c34d92cbe8501bbbfe837bc491a47452c0b6 Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期一, 09 六月 2025 10:58:19 +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