车间能级提升-智能设备管理系统
baoshiwei
2025-07-02 2f0009c750de4d47a18cce4a5a403fa83ba0c209
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;
/**
 * 备件出入库Service业务层处理
@@ -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;
    }
}