| | |
| | | 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; |
| | |
| | | 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业务层处理 |
| | |
| | | public class EimsSpareInoutServiceImpl implements IEimsSpareInoutService { |
| | | |
| | | private final EimsSpareInoutMapper baseMapper; |
| | | private final EimsSpareInoutdtMapper inoutdtMapper; |
| | | private final EimsSpareMapper spareMapper; |
| | | |
| | | /** |
| | | * 查询备件出入库 |
| | |
| | | */ |
| | | @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; |
| | | } |
| | | |
| | | /** |
| | |
| | | Page<EimsSpareInoutVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); |
| | | return TableDataInfo.build(result); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 查询符合条件的备件出入库列表 |
| | |
| | | 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; |
| | | } |
| | |
| | | } |
| | | return baseMapper.deleteByIds(ids) > 0; |
| | | } |
| | | |
| | | |
| | | } |