仓库库区

This commit is contained in:
DataCall 2024-07-17 16:34:41 +08:00
parent 03d17efab2
commit e6f252d615
14 changed files with 902 additions and 0 deletions

View file

@ -0,0 +1,100 @@
package com.ruoyi.wms.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import com.ruoyi.common.excel.utils.ExcelUtil;
import com.ruoyi.common.idempotent.annotation.RepeatSubmit;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.mybatis.core.page.PageQuery;
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
import com.ruoyi.common.web.core.BaseController;
import com.ruoyi.wms.domain.bo.AreaBo;
import com.ruoyi.wms.domain.vo.AreaVo;
import com.ruoyi.wms.service.AreaService;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/wms/area")
public class AreaController extends BaseController {
private final AreaService areaService;
/**
* 查询库区列表
*/
@SaCheckPermission("wms:area:list")
@GetMapping("/list")
public TableDataInfo<AreaVo> list(AreaBo bo, PageQuery pageQuery) {
return areaService.queryPageList(bo, pageQuery);
}
/**
* 导出库区列表
*/
@SaCheckPermission("wms:area:export")
@Log(title = "库区", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(AreaBo bo, HttpServletResponse response) {
List<AreaVo> list = areaService.queryList(bo);
ExcelUtil.exportExcel(list, "库区", AreaVo.class, response);
}
/**
* 获取库区详细信息
*
* @param id 主键
*/
@SaCheckPermission("wms:area:query")
@GetMapping("/{id}")
public R<AreaVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(areaService.queryById(id));
}
/**
* 新增库区
*/
@SaCheckPermission("wms:area:add")
@Log(title = "库区", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody AreaBo bo) {
return toAjax(areaService.insertByBo(bo));
}
/**
* 修改库区
*/
@SaCheckPermission("wms:area:edit")
@Log(title = "库区", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody AreaBo bo) {
return toAjax(areaService.updateByBo(bo));
}
/**
* 删除库区
*
* @param ids 主键串
*/
@SaCheckPermission("wms:area:remove")
@Log(title = "库区", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(areaService.deleteWithValidByIds(List.of(ids), true));
}
}

View file

@ -0,0 +1,108 @@
package com.ruoyi.wms.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import com.ruoyi.common.excel.utils.ExcelUtil;
import com.ruoyi.common.idempotent.annotation.RepeatSubmit;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.mybatis.core.page.PageQuery;
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
import com.ruoyi.common.web.core.BaseController;
import com.ruoyi.wms.domain.bo.WarehouseBo;
import com.ruoyi.wms.domain.vo.WarehouseVo;
import com.ruoyi.wms.service.WarehouseService;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/wms/warehouse")
public class WarehouseController extends BaseController {
private final WarehouseService warehouseService;
/**
* 查询仓库列表
*/
@SaCheckPermission("wms:warehouse:list")
@GetMapping("/list")
public TableDataInfo<WarehouseVo> list(WarehouseBo bo, PageQuery pageQuery) {
return warehouseService.queryPageList(bo, pageQuery);
}
/**
* 导出仓库列表
*/
@SaCheckPermission("wms:warehouse:export")
@Log(title = "仓库", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(WarehouseBo bo, HttpServletResponse response) {
List<WarehouseVo> list = warehouseService.queryList(bo);
ExcelUtil.exportExcel(list, "仓库", WarehouseVo.class, response);
}
/**
* 获取仓库详细信息
*
* @param id 主键
*/
@SaCheckPermission("wms:warehouse:query")
@GetMapping("/{id}")
public R<WarehouseVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(warehouseService.queryById(id));
}
/**
* 新增仓库
*/
@SaCheckPermission("wms:warehouse:add")
@Log(title = "仓库", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody WarehouseBo bo) {
return toAjax(warehouseService.insertByBo(bo));
}
/**
* 修改仓库
*/
@SaCheckPermission("wms:warehouse:edit")
@Log(title = "仓库", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody WarehouseBo bo) {
return toAjax(warehouseService.updateByBo(bo));
}
/**
* 删除仓库
*
* @param ids 主键串
*/
@SaCheckPermission("wms:warehouse:remove")
@Log(title = "仓库", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(warehouseService.deleteWithValidByIds(List.of(ids), true));
}
@SaCheckPermission("wms:warehouse:edit")
@Log(title = "仓库", businessType = BusinessType.UPDATE)
@PostMapping("/update/orderNum")
public R<Void> updateOrderNum(@RequestBody List<WarehouseBo> tree) {
warehouseService.updateOrderNum(tree);
return R.ok();
}
}

View file

@ -0,0 +1,50 @@
package com.ruoyi.wms.domain.bo;
import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import com.ruoyi.common.mybatis.core.domain.BaseEntity;
import com.ruoyi.wms.domain.entity.Area;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = Area.class, reverseConvertGenerate = false)
public class AreaBo extends BaseEntity {
/**
*
*/
@NotNull(message = "不能为空", groups = {EditGroup.class})
private Long id;
/**
* 租户编号
*/
private String tenantId;
/**
* 编号
*/
private String areaNo;
/**
* 名称
*/
@NotBlank(message = "名称不能为空", groups = {AddGroup.class, EditGroup.class})
private String areaName;
/**
* 所属仓库ID
*/
@NotNull(message = "所属仓库不能为空", groups = {AddGroup.class, EditGroup.class})
private Long warehouseId;
/**
* 备注
*/
private String remark;
}

View file

@ -0,0 +1,44 @@
package com.ruoyi.wms.domain.bo;
import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import com.ruoyi.common.mybatis.core.domain.BaseEntity;
import com.ruoyi.wms.domain.entity.Warehouse;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = Warehouse.class, reverseConvertGenerate = false)
public class WarehouseBo extends BaseEntity {
/**
*
*/
@NotNull(message = "不能为空", groups = { EditGroup.class })
private Long id;
/**
* 编号
*/
private String warehouseNo;
/**
* 名称
*/
@NotBlank(message = "名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String warehouseName;
/**
* 备注
*/
private String remark;
/**
* 排序
*/
private Long orderNum;
}

View file

@ -0,0 +1,53 @@
package com.ruoyi.wms.domain.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.mybatis.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_area")
public class Area extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id")
private Long id;
/**
* 编号
*/
private String areaNo;
/**
* 名称
*/
private String areaName;
/**
* 所属仓库ID
*/
private Long warehouseId;
/**
* 备注
*/
private String remark;
/**
* 删除标识
*/
@TableLogic
private Integer delFlag;
}

View file

@ -0,0 +1,51 @@
package com.ruoyi.wms.domain.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.mybatis.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_warehouse")
public class Warehouse extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id")
private Long id;
/**
* 编号
*/
private String warehouseNo;
/**
* 名称
*/
private String warehouseName;
/**
* 排序
*/
private Long orderNum;
/**
* 删除标识
*/
@TableLogic
private Integer delFlag;
/**
* 备注
*/
private String remark;
}

View file

@ -0,0 +1,52 @@
package com.ruoyi.wms.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.ruoyi.wms.domain.entity.Area;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = Area.class)
public class AreaVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "")
private Long id;
/**
* 编号
*/
@ExcelProperty(value = "编号")
private String areaNo;
/**
* 名称
*/
@ExcelProperty(value = "名称")
private String areaName;
/**
* 所属仓库ID
*/
@ExcelProperty(value = "所属仓库ID")
private Long warehouseId;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
private Integer delFlag;
}

View file

@ -0,0 +1,53 @@
package com.ruoyi.wms.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.ruoyi.wms.domain.entity.Warehouse;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = Warehouse.class)
public class WarehouseVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "")
private Long id;
/**
* 编号
*/
@ExcelProperty(value = "编号")
private String warehouseNo;
/**
* 名称
*/
@ExcelProperty(value = "名称")
private String warehouseName;
/**
* 排序
*/
@ExcelProperty(value = "排序")
private Long orderNum;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
private Integer delFlag;
private List<AreaVo> areaList;
}

View file

@ -0,0 +1,13 @@
package com.ruoyi.wms.mapper;
import com.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
import com.ruoyi.wms.domain.entity.Area;
import com.ruoyi.wms.domain.vo.AreaVo;
import org.apache.ibatis.annotations.Param;
import java.util.Collection;
import java.util.List;
public interface AreaMapper extends BaseMapperPlus<Area, AreaVo> {
List<AreaVo> queryByIdsIgnoreDelFlag(@Param("list") Collection<Long> ids);
}

View file

@ -0,0 +1,16 @@
package com.ruoyi.wms.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.ruoyi.common.mybatis.core.mapper.BaseMapperPlus;
import com.ruoyi.wms.domain.entity.Warehouse;
import com.ruoyi.wms.domain.vo.WarehouseVo;
import org.apache.ibatis.annotations.Param;
import java.util.Collection;
import java.util.List;
public interface WarehouseMapper extends BaseMapperPlus<Warehouse, WarehouseVo> {
List<WarehouseVo> selectByIdsIgnoreDelFlag(@Param("list") Collection<Long> ids);
}

View file

@ -0,0 +1,155 @@
package com.ruoyi.wms.service;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.utils.MapstructUtils;
import com.ruoyi.common.mybatis.core.page.PageQuery;
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
import com.ruoyi.wms.domain.bo.AreaBo;
import com.ruoyi.wms.domain.entity.Area;
import com.ruoyi.wms.domain.vo.AreaVo;
import com.ruoyi.wms.mapper.AreaMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@RequiredArgsConstructor
@Service
public class AreaService {
private final AreaMapper baseMapper;
/**
* 查询库区
*/
public AreaVo queryById(Long id) {
return baseMapper.selectVoById(id);
}
/**
* 查询库区列表
*/
public TableDataInfo<AreaVo> queryPageList(AreaBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<Area> lqw = buildQueryWrapper(bo);
Page<AreaVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询库区列表
*/
public List<AreaVo> queryList(AreaBo bo) {
LambdaQueryWrapper<Area> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
/**
* 获取该仓库下的库区数量
*
* @param id 仓库id
*/
public Long countByWarehouseId(Long id) {
LambdaQueryWrapper<Area> lqw = Wrappers.lambdaQuery();
lqw.eq(Area::getWarehouseId, id);
return baseMapper.selectCount(lqw);
}
private LambdaQueryWrapper<Area> buildQueryWrapper(AreaBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<Area> lqw = Wrappers.lambdaQuery();
lqw.eq(StrUtil.isNotBlank(bo.getAreaNo()), Area::getAreaNo, bo.getAreaNo());
lqw.like(StrUtil.isNotBlank(bo.getAreaName()), Area::getAreaName, bo.getAreaName());
lqw.eq(bo.getWarehouseId() != null, Area::getWarehouseId, bo.getWarehouseId());
return lqw;
}
/**
* 新增库区
*/
public Boolean insertByBo(AreaBo bo) {
validEntityBeforeSave(bo);
Area add = MapstructUtils.convert(bo, Area.class);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改库区
*/
public Boolean updateByBo(AreaBo bo) {
validEntityBeforeSave(bo);
Area update = MapstructUtils.convert(bo, Area.class);
return baseMapper.updateById(update) > 0;
}
private void validateAreaNameAndNo(AreaBo area) {
LambdaQueryWrapper<Area> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(Area::getWarehouseId, area.getWarehouseId());
queryWrapper.eq(Area::getAreaName, area.getAreaName());
queryWrapper.ne(area.getId() != null, Area::getId, area.getId());
boolean result = baseMapper.selectCount(queryWrapper) == 0;
if (!result) {
throw new RuntimeException("库区名称重复");
}
if (StrUtil.isBlank(area.getAreaNo())) {
return;
}
queryWrapper.clear();
queryWrapper.eq(Area::getAreaNo, area.getAreaNo());
queryWrapper.ne(area.getId() != null, Area::getId, area.getId());
result = baseMapper.selectCount(queryWrapper) == 0;
if (!result) {
throw new RuntimeException("库区编号重复");
}
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(AreaBo entity){
validateAreaNameAndNo(entity);
}
/**
* 批量删除库区
*/
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
return baseMapper.deleteBatchIds(ids) > 0;
}
/*
* 删除前的数据校验
* */
private void validEntityBeforeDelete(Collection<Long> ids) {
ids.forEach(id -> {
AreaVo areaVo = queryById(id);
// 获取该仓库下的库区数量,如果只有一个,则不能删除
if (countByWarehouseId(areaVo.getWarehouseId()) == 1) {
throw new RuntimeException("该仓库下只有一个库区,不能删除");
}
});
}
public List<AreaVo> queryByIdsIgnoreDelFlag(Collection<Long> ids) {
if (CollUtil.isEmpty(ids)) {
return CollUtil.newArrayList();
}
return baseMapper.queryByIdsIgnoreDelFlag(ids);
}
}

View file

@ -0,0 +1,170 @@
package com.ruoyi.wms.service;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.utils.MapstructUtils;
import com.ruoyi.common.mybatis.core.page.PageQuery;
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
import com.ruoyi.wms.domain.bo.WarehouseBo;
import com.ruoyi.wms.domain.entity.Area;
import com.ruoyi.wms.domain.entity.Warehouse;
import com.ruoyi.wms.domain.vo.WarehouseVo;
import com.ruoyi.wms.mapper.AreaMapper;
import com.ruoyi.wms.mapper.WarehouseMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@RequiredArgsConstructor
@Service
public class WarehouseService extends ServiceImpl<WarehouseMapper, Warehouse> {
private final WarehouseMapper baseMapper;
private final AreaService areaService;
private final AreaMapper areaMapper;
/**
* 查询仓库
*/
public WarehouseVo queryById(Long id) {
return baseMapper.selectVoById(id);
}
/**
* 查询仓库列表
*/
public TableDataInfo<WarehouseVo> queryPageList(WarehouseBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<Warehouse> lqw = buildQueryWrapper(bo);
Page<WarehouseVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询仓库列表
*/
public List<WarehouseVo> queryList(WarehouseBo bo) {
LambdaQueryWrapper<Warehouse> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<Warehouse> buildQueryWrapper(WarehouseBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<Warehouse> lqw = Wrappers.lambdaQuery();
lqw.eq(StrUtil.isNotBlank(bo.getWarehouseNo()), Warehouse::getWarehouseNo, bo.getWarehouseNo());
lqw.like(StrUtil.isNotBlank(bo.getWarehouseName()), Warehouse::getWarehouseName, bo.getWarehouseName());
lqw.orderByAsc(Warehouse::getOrderNum);
return lqw;
}
/**
* 新增仓库
*/
public Boolean insertByBo(WarehouseBo bo) {
validEntityBeforeSave(bo);
Warehouse add = MapstructUtils.convert(bo, Warehouse.class);
add.setOrderNum(this.getNextOrderNum());
return baseMapper.insert(add) > 0;
}
private Long getNextOrderNum() {
LambdaQueryWrapper<Warehouse> wrapper = new LambdaQueryWrapper<>();
wrapper.orderByDesc(Warehouse::getOrderNum);
wrapper.last("limit 1");
Warehouse warehouse = baseMapper.selectOne(wrapper);
return warehouse == null ? 0L : warehouse.getOrderNum() + 1;
}
/**
* 修改仓库
*/
public Boolean updateByBo(WarehouseBo bo) {
validEntityBeforeSave(bo);
Warehouse update = MapstructUtils.convert(bo, Warehouse.class);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(WarehouseBo entity) {
validateWarehouseNameAndNo(entity);
}
private void validateWarehouseNameAndNo(WarehouseBo warehouse) {
LambdaQueryWrapper<Warehouse> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(Warehouse::getWarehouseName, warehouse.getWarehouseName()).or().eq(StrUtil.isNotBlank(warehouse.getWarehouseNo()), Warehouse::getWarehouseNo, warehouse.getWarehouseNo());
List<Warehouse> warehouseList = baseMapper.selectList(queryWrapper);
boolean validateNameResult = warehouseList.stream().anyMatch(
it -> Objects.equals(it.getWarehouseName(), warehouse.getWarehouseName()) && !Objects.equals(it.getId(), warehouse.getId()));
if (validateNameResult) {
throw new RuntimeException("仓库名称重复");
}
boolean validateNoResult = warehouseList.stream().anyMatch(
it -> Objects.equals(it.getWarehouseNo(), warehouse.getWarehouseNo()) && !Objects.equals(it.getId(), warehouse.getId()));
if (validateNoResult) {
throw new RuntimeException("仓库编号重复");
}
}
/**
* 批量删除仓库
*/
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
List<Long> areaIdList = this.getAreaIdInWarehouse(ids);
boolean flag = baseMapper.deleteBatchIds(ids) > 0;
if (flag && CollUtil.isNotEmpty(areaIdList)) {
flag = areaMapper.deleteBatchIds(areaIdList) > 0;
}
return flag;
}
private List<Long> getAreaIdInWarehouse(Collection<Long> ids) {
LambdaQueryWrapper<Area> wrapper = new LambdaQueryWrapper<>();
wrapper.in(Area::getWarehouseId, ids);
return areaMapper.selectList(wrapper).stream().map(Area::getId).collect(Collectors.toList());
}
/*
* 删除前的数据校验
* */
private void validEntityBeforeDelete(Collection<Long> ids) {
ids.forEach(id -> {
// 获取该仓库下的库区数量
if (areaService.countByWarehouseId(id) > 0) {
throw new RuntimeException("该仓库下存在库区,不能删除");
}
});
}
public List<WarehouseVo> queryByIdsIgnoreDelFlag(Collection<Long> ids) {
if (CollUtil.isEmpty(ids)) {
return CollUtil.newArrayList();
}
return baseMapper.selectByIdsIgnoreDelFlag(ids);
}
public void updateOrderNum(List<WarehouseBo> tree) {
if (CollUtil.isEmpty(tree)) {
return;
}
List<Warehouse> updateList = MapstructUtils.convert(tree, Warehouse.class);
saveOrUpdateBatch(updateList);
}
}

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.wms.mapper.AreaMapper">
<sql id="selectAreaVo">
select id,tenant_id,area_no,area_name,warehouse_id,remark,del_flag,create_by,create_time,update_by,update_time from wms_area
</sql>
<select id="queryByIdsIgnoreDelFlag" resultType="com.ruoyi.wms.domain.vo.AreaVo">
<include refid="selectAreaVo"/>
where id in
<foreach collection="list" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</select>
</mapper>

View file

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.wms.mapper.WarehouseMapper">
<sql id="selectWarehouseVo">
select id,tenant_id,warehouse_no,warehouse_name,del_flag,remark,order_num,create_by,create_time,update_by,update_time from wms_warehouse
</sql>
<select id="selectByIdsIgnoreDelFlag" resultType="com.ruoyi.wms.domain.vo.WarehouseVo">
<include refid="selectWarehouseVo"/>
where id in
<foreach collection="list" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</select>
</mapper>