仓库业务逻辑补全2.0 : 1、出库修改删除数据时库存相应改变;2、出库的列表查询 新增更多查询参数 ;3、修复一些BUG
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user