仓库业务逻辑补全2.0 : 1、出库修改删除数据时库存相应改变;2、出库的列表查询 新增更多查询参数 ;3、修复一些BUG

This commit is contained in:
刘宗坤
2024-11-05 23:31:31 +08:00
parent 36d06eeb53
commit 57a88d5959
13 changed files with 351 additions and 16 deletions

View File

@@ -1,6 +1,8 @@
package com.ruoyi.oa.service;
import com.ruoyi.oa.domain.SysOaOutWarehouse;
import com.ruoyi.oa.domain.bo.SysOaOutWarehouseBoList;
import com.ruoyi.oa.domain.vo.SysOaOutWarehouseListVo;
import com.ruoyi.oa.domain.vo.SysOaOutWarehouseVo;
import com.ruoyi.oa.domain.bo.SysOaOutWarehouseBo;
import com.ruoyi.common.core.page.TableDataInfo;
@@ -32,7 +34,7 @@ public interface ISysOaOutWarehouseService {
/**
* 查询仓库出库列表
*/
TableDataInfo<SysOaOutWarehouseVo> queryPageList(SysOaOutWarehouseBo bo, PageQuery pageQuery);
TableDataInfo<SysOaOutWarehouseListVo> queryPageList(SysOaOutWarehouseBo bo, PageQuery pageQuery);
/**
* 查询仓库出库列表
@@ -44,6 +46,11 @@ public interface ISysOaOutWarehouseService {
*/
Boolean insertByBo(SysOaOutWarehouseBo bo);
/**
* 仓库批量出库
*/
Boolean insertByBoList(SysOaOutWarehouseBoList boList);
/**
* 修改仓库出库
*/
@@ -55,5 +62,4 @@ public interface ISysOaOutWarehouseService {
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@@ -1,13 +1,20 @@
package com.ruoyi.oa.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.oa.domain.SysOaProject;
import com.ruoyi.oa.domain.SysOaWarehouse;
import com.ruoyi.oa.domain.bo.SysOaOutWarehouseBo2;
import com.ruoyi.oa.domain.bo.SysOaOutWarehouseBoList;
import com.ruoyi.oa.domain.vo.SysOaOutWarehouseListVo;
import com.ruoyi.oa.mapper.SysOaProjectMapper;
import com.ruoyi.oa.mapper.SysOaWarehouseMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@@ -17,10 +24,13 @@ import com.ruoyi.oa.domain.SysOaOutWarehouse;
import com.ruoyi.oa.mapper.SysOaOutWarehouseMapper;
import com.ruoyi.oa.service.ISysOaOutWarehouseService;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import static cn.hutool.core.bean.BeanUtil.*;
/**
* 仓库出库Service业务层处理
*
@@ -61,9 +71,19 @@ public class SysOaOutWarehouseServiceImpl implements ISysOaOutWarehouseService {
* 查询仓库出库列表
*/
@Override
public TableDataInfo<SysOaOutWarehouseVo> queryPageList(SysOaOutWarehouseBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<SysOaOutWarehouse> lqw = buildQueryWrapper(bo);
Page<SysOaOutWarehouseVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
public TableDataInfo<SysOaOutWarehouseListVo> queryPageList(SysOaOutWarehouseBo bo, PageQuery pageQuery) {
// LambdaQueryWrapper<SysOaOutWarehouse> lqw = buildQueryWrapper(bo);
// Page<SysOaOutWarehouseVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
pageQuery.setPageNum(ObjectUtil.defaultIfNull(pageQuery.getPageNum(), 1));
pageQuery.setPageSize(ObjectUtil.defaultIfNull(pageQuery.getPageSize(), Integer.MAX_VALUE));
if (pageQuery.getPageNum() <= 0) {
pageQuery.setPageNum(1);
}
if (pageQuery.getPageSize() <= 0) {
pageQuery.setPageSize(Integer.MAX_VALUE);
}
pageQuery.setPageNum((pageQuery.getPageNum() - 1)*pageQuery.getPageSize());
List<SysOaOutWarehouseListVo> result = baseMapper.defineselectList(bo, pageQuery);
return TableDataInfo.build(result);
}
@@ -79,9 +99,11 @@ public class SysOaOutWarehouseServiceImpl implements ISysOaOutWarehouseService {
private LambdaQueryWrapper<SysOaOutWarehouse> buildQueryWrapper(SysOaOutWarehouseBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<SysOaOutWarehouse> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getProjectId() != null, SysOaOutWarehouse::getProjectId, bo.getProjectId());
lqw.eq(bo.getAmount() != null, SysOaOutWarehouse::getAmount, bo.getAmount());
lqw.eq(bo.getWarehouseId() != null, SysOaOutWarehouse::getWarehouseId, bo.getWarehouseId());
return lqw;
}
@@ -90,10 +112,13 @@ public class SysOaOutWarehouseServiceImpl implements ISysOaOutWarehouseService {
*/
@Override
public Boolean insertByBo(SysOaOutWarehouseBo bo) {
SysOaOutWarehouse decrease = BeanUtil.toBean(bo, SysOaOutWarehouse.class);
SysOaOutWarehouse decrease = toBean(bo, SysOaOutWarehouse.class);
validEntityBeforeSave(decrease);
SysOaWarehouse warehouse = baseMapper2.selectById(decrease.getWarehouseId());
// 1 如果对应仓库表项目数量-将要出库数量<0出库失败, 繁殖 增加该条
if(warehouse == null) {
throw new Error("已不存在该物料"+decrease.getWarehouseId());
}
if(warehouse.getInventory() - decrease.getAmount() < 0) {
throw new Error("剩余数量不足,出库失败");
}
@@ -106,14 +131,74 @@ public class SysOaOutWarehouseServiceImpl implements ISysOaOutWarehouseService {
return baseMapper.insert(decrease) > 0;
}
/**
* 仓库批量出库
*/
@Override
public Boolean insertByBoList(SysOaOutWarehouseBoList boList) {
// 只进行了插入出库表
// 还缺少 检验数量是否足够,以及删除对应库存数量的业务逻辑
Long projectId = boList.getProjectId();
List<SysOaOutWarehouseBo2> list = boList.getOutWareHouseList();
list.forEach((sysOaOutWarehouseBo2 -> {
sysOaOutWarehouseBo2.setProjectId(projectId);
SysOaOutWarehouseBo sysOaOutWarehouse = toBean(sysOaOutWarehouseBo2, SysOaOutWarehouseBo.class);
insertByBo(sysOaOutWarehouse);
}));
return true;
}
/**
* 修改仓库出库
*/
@Override
public Boolean updateByBo(SysOaOutWarehouseBo bo) {
SysOaOutWarehouse update = BeanUtil.toBean(bo, SysOaOutWarehouse.class);
SysOaOutWarehouse update = toBean(bo, SysOaOutWarehouse.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
// 修改后的数量
Long amount1 = update.getAmount();
//获得 修改前的数量
SysOaOutWarehouse sysOaOutWarehouse = baseMapper.selectById(update.getId());
Long amount = sysOaOutWarehouse.getAmount();
//找出库存表对应的那条数据 的库存数量
LambdaQueryWrapper<SysOaWarehouse> lqw = Wrappers.lambdaQuery();
lqw.eq(SysOaWarehouse::getId, update.getWarehouseId());
SysOaWarehouse warehouse = baseMapper2.selectOne(lqw);
Long inventory = warehouse.getInventory();
//出库多了
if(amount1 > amount) {
//确保出库不超余量
if(amount1-amount<=inventory) {
//可以减少差值
baseMapper.updateById(update);
warehouse.setInventory(inventory -( amount1 - amount));
baseMapper2.updateById(warehouse);
}
else {
throw new Error("库存数量不足,无法增加出库数量");
}
}
else {
//确保出库不能为负
if (amount1 > 0) {
//此时增加差值
baseMapper.updateById(update);
warehouse.setInventory(warehouse.getInventory() + amount - amount1);
baseMapper2.updateById(warehouse);
}
else {
throw new Error("出库数量不能为负");
}
}
return true;
}
/**
@@ -131,7 +216,28 @@ public class SysOaOutWarehouseServiceImpl implements ISysOaOutWarehouseService {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
//需要增加的对应物料数量
LambdaQueryWrapper<SysOaOutWarehouse> lqw = Wrappers.lambdaQuery();
lqw.in(SysOaOutWarehouse::getId, ids.toArray());
List<SysOaOutWarehouse> sysOaOutWarehouses = baseMapper.selectList(lqw); //出库表中的所有删除的数据
sysOaOutWarehouses.forEach(sysOaOutWarehouse -> { //其中一条
//选出相对应的 库存表中那一条的数据
LambdaQueryWrapper<SysOaWarehouse> lqw2 = Wrappers.lambdaQuery();
lqw2.eq(SysOaWarehouse::getId, sysOaOutWarehouse.getWarehouseId());
SysOaWarehouse warehouse = baseMapper2.selectOne(lqw2);
// 恢复原本出库的数量
warehouse.setInventory(warehouse.getInventory() + sysOaOutWarehouse.getAmount());
baseMapper2.updateById(warehouse);
});
boolean flag = baseMapper.deleteBatchIds(ids) > 0;
return flag;
}

View File

@@ -7,6 +7,8 @@ import com.ruoyi.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.oa.domain.SysOaOutWarehouse;
import com.ruoyi.oa.mapper.SysOaOutWarehouseMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.ruoyi.oa.domain.bo.SysOaWarehouseBo;
@@ -15,6 +17,7 @@ import com.ruoyi.oa.domain.SysOaWarehouse;
import com.ruoyi.oa.mapper.SysOaWarehouseMapper;
import com.ruoyi.oa.service.ISysOaWarehouseService;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Collection;
@@ -31,6 +34,8 @@ public class SysOaWarehouseServiceImpl implements ISysOaWarehouseService {
private final SysOaWarehouseMapper baseMapper;
private final SysOaOutWarehouseMapper outWareMapper;
/**
* 查询仓库管理
*/
@@ -122,6 +127,13 @@ public class SysOaWarehouseServiceImpl implements ISysOaWarehouseService {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
LambdaQueryWrapper<SysOaWarehouse> lqw = Wrappers.lambdaQuery();
lqw.in(SysOaWarehouse::getId, ids);
List<SysOaWarehouse> sysOaWarehouses = baseMapper.selectList(lqw);
sysOaWarehouses.forEach(sysOaWarehouse -> {
sysOaWarehouse.setDelFlag(1L);
});
return baseMapper.updateBatchById(sysOaWarehouses);
}
}