mirror of
https://github.com/zccbbg/wms-ruoyi.git
synced 2024-09-20 11:05:54 +08:00
仓库库区
This commit is contained in:
parent
03d17efab2
commit
e6f252d615
|
@ -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));
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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>
|
|
@ -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>
|
Loading…
Reference in a new issue