feat(wms): 添加区域基础信息管理功能

- 添加数据校验逻辑,确保区域编码和名称的唯一性
master
zangch@mesnac.com 2 weeks ago
parent 5c8628ad86
commit 1e0a8e65ab

@ -0,0 +1,117 @@
package org.dromara.wms.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.wms.domain.vo.WmsBaseAreaVo;
import org.dromara.wms.domain.bo.WmsBaseAreaBo;
import org.dromara.wms.service.IWmsBaseAreaService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
*
* 访:/wms/wmsBaseArea
*
* @author zch
* @date 2025-08-04
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/wmsBaseArea")
public class WmsBaseAreaController extends BaseController {
private final IWmsBaseAreaService wmsBaseAreaService;
/**
*
*/
@SaCheckPermission("wms:wmsBaseArea:list")
@GetMapping("/list")
public TableDataInfo<WmsBaseAreaVo> list(WmsBaseAreaBo bo, PageQuery pageQuery) {
return wmsBaseAreaService.queryPageList(bo, pageQuery);
}
/**
*
*/
@SaCheckPermission("wms:wmsBaseArea:export")
@Log(title = "区域基础信息", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(WmsBaseAreaBo bo, HttpServletResponse response) {
List<WmsBaseAreaVo> list = wmsBaseAreaService.queryList(bo);
ExcelUtil.exportExcel(list, "区域基础信息", WmsBaseAreaVo.class, response);
}
/**
*
*
* @param areaId
*/
@SaCheckPermission("wms:wmsBaseArea:query")
@GetMapping("/{areaId}")
public R<WmsBaseAreaVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long areaId) {
return R.ok(wmsBaseAreaService.queryById(areaId));
}
/**
*
*/
@SaCheckPermission("wms:wmsBaseArea:add")
@Log(title = "区域基础信息", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody WmsBaseAreaBo bo) {
return toAjax(wmsBaseAreaService.insertByBo(bo));
}
/**
*
*/
@SaCheckPermission("wms:wmsBaseArea:edit")
@Log(title = "区域基础信息", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody WmsBaseAreaBo bo) {
return toAjax(wmsBaseAreaService.updateByBo(bo));
}
/**
*
*
* @param areaIds
*/
@SaCheckPermission("wms:wmsBaseArea:remove")
@Log(title = "区域基础信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{areaIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] areaIds) {
return toAjax(wmsBaseAreaService.deleteWithValidByIds(List.of(areaIds), true));
}
/**
*
*/
@GetMapping("/getWmsBaseAreaList")
public R<List<WmsBaseAreaVo>> getWmsBaseAreaList(WmsBaseAreaBo bo) {
List<WmsBaseAreaVo> list = wmsBaseAreaService.queryList(bo);
return R.ok(list);
}
}

@ -0,0 +1,84 @@
package org.dromara.wms.domain;
import org.dromara.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* wms_base_area
*
* @author zch
* @date 2025-08-04
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_base_area")
public class WmsBaseArea extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
@TableId(value = "area_id", type = IdType.AUTO)
private Long areaId;
/**
* ID
*/
private Long warehouseId;
/**
*
*/
private String areaCode;
/**
*
*/
private String areaName;
/**
* 1 2 3 4
*/
private String areaType;
/**
*
*/
private String areaManager;
/**
* (1 0)
*/
private String activeFlag;
/**
*
*/
private String remark;
/**
* 0 2
*/
@TableLogic
private String delFlag;
/**
*
*/
@TableField(exist = false)
private String warehouseCode;//JOIN wms_base_warehouse
/**
*
*/
@TableField(exist = false)
private String warehouseName;//JOIN wms_base_warehouse
}

@ -0,0 +1,64 @@
package org.dromara.wms.domain.bo;
import org.dromara.wms.domain.WmsBaseArea;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* wms_base_area
*
* @author zch
* @date 2025-08-04
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = WmsBaseArea.class, reverseConvertGenerate = false)
public class WmsBaseAreaBo extends BaseEntity {
/**
* ID
*/
private Long areaId;
/**
* ID
*/
private Long warehouseId;
/**
*
*/
private String areaCode;
/**
*
*/
private String areaName;
/**
* 1 2 3 4
*/
private String areaType;
/**
*
*/
private String areaManager;
/**
* (1 0)
*/
private String activeFlag;
/**
*
*/
private String remark;
}

@ -0,0 +1,93 @@
package org.dromara.wms.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.wms.domain.WmsBaseArea;
import java.io.Serial;
import java.io.Serializable;
/**
* wms_base_area
*
* @author zch
* @date 2025-08-04
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = WmsBaseArea.class)
public class WmsBaseAreaVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* ID
*/
@ExcelProperty(value = "区域ID")
private Long areaId;
/**
* ID
*/
@ExcelProperty(value = "仓库ID")
private Long warehouseId;
/**
*
*/
@ExcelProperty(value = "区域编码")
private String areaCode;
/**
*
*/
@ExcelProperty(value = "区域名称")
private String areaName;
/**
* 1 2 3 4
*/
@ExcelProperty(value = "区域类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "area_type")
private String areaType;
/**
*
*/
@ExcelProperty(value = "区域负责人")
private String areaManager;
/**
* (1 0)
*/
@ExcelProperty(value = "激活标识(1是 0否)", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "active_flag")
private String activeFlag;
/**
*
*/
@ExcelProperty(value = "备注")
private String remark;
/**
*
*/
private String warehouseCode;//JOIN wms_base_warehouse
/**
*
*/
private String warehouseName;//JOIN wms_base_warehouse
}

@ -0,0 +1,15 @@
package org.dromara.wms.mapper;
import org.dromara.wms.domain.WmsBaseArea;
import org.dromara.wms.domain.vo.WmsBaseAreaVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* Mapper
*
* @author zch
* @date 2025-08-04
*/
public interface WmsBaseAreaMapper extends BaseMapperPlus<WmsBaseArea, WmsBaseAreaVo> {
}

@ -0,0 +1,69 @@
package org.dromara.wms.service;
import org.dromara.wms.domain.WmsBaseArea;
import org.dromara.wms.domain.vo.WmsBaseAreaVo;
import org.dromara.wms.domain.bo.WmsBaseAreaBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* Service
*
* @author zch
* @date 2025-08-04
*/
public interface IWmsBaseAreaService {
/**
*
*
* @param areaId
* @return
*/
WmsBaseAreaVo queryById(Long areaId);
/**
*
*
* @param bo
* @param pageQuery
* @return
*/
TableDataInfo<WmsBaseAreaVo> queryPageList(WmsBaseAreaBo bo, PageQuery pageQuery);
/**
*
*
* @param bo
* @return
*/
List<WmsBaseAreaVo> queryList(WmsBaseAreaBo bo);
/**
*
*
* @param bo
* @return
*/
Boolean insertByBo(WmsBaseAreaBo bo);
/**
*
*
* @param bo
* @return
*/
Boolean updateByBo(WmsBaseAreaBo bo);
/**
*
*
* @param ids
* @param isValid
* @return
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

@ -0,0 +1,174 @@
package org.dromara.wms.service.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.Utils.UniqueCodeUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.wms.domain.WmsBaseArea;
import org.dromara.wms.domain.WmsBaseWarehouse;
import org.dromara.wms.domain.bo.WmsBaseAreaBo;
import org.dromara.wms.domain.vo.WmsBaseAreaVo;
import org.dromara.wms.mapper.WmsBaseAreaMapper;
import org.dromara.wms.mapper.WmsBaseWarehouseMapper;
import org.dromara.wms.service.IWmsBaseAreaService;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* Service
*
* @author zch
* @date 2025-08-04
*/
@RequiredArgsConstructor
@Service
public class WmsBaseAreaServiceImpl implements IWmsBaseAreaService {
private final WmsBaseAreaMapper baseMapper;
private final WmsBaseWarehouseMapper wmsBaseWarehouseMapper;
/**
*
*
* @param areaId
* @return
*/
@Override
public WmsBaseAreaVo queryById(Long areaId){
return baseMapper.selectVoById(areaId);
}
/**
*
*
* @param bo
* @param pageQuery
* @return
*/
@Override
public TableDataInfo<WmsBaseAreaVo> queryPageList(WmsBaseAreaBo bo, PageQuery pageQuery) {
MPJLambdaWrapper<WmsBaseArea> lqw = buildQueryWrapper(bo);
Page<WmsBaseAreaVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
*
*
* @param bo
* @return
*/
@Override
public List<WmsBaseAreaVo> queryList(WmsBaseAreaBo bo) {
MPJLambdaWrapper<WmsBaseArea> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private MPJLambdaWrapper<WmsBaseArea> buildQueryWrapper(WmsBaseAreaBo bo) {
Map<String, Object> params = bo.getParams();
MPJLambdaWrapper<WmsBaseArea> lqw = JoinWrappers.lambda(WmsBaseArea.class)
.selectAll(WmsBaseArea.class)
// 关联仓库id
.select(WmsBaseWarehouse::getWarehouseName)
.leftJoin(WmsBaseWarehouse.class, WmsBaseWarehouse::getWarehouseId, WmsBaseArea::getWarehouseId)
.eq(bo.getAreaId() != null, WmsBaseArea::getAreaId, bo.getAreaId())
.eq(bo.getWarehouseId() != null, WmsBaseArea::getWarehouseId, bo.getWarehouseId())
.eq(StringUtils.isNotBlank(bo.getAreaCode()), WmsBaseArea::getAreaCode, bo.getAreaCode())
.like(StringUtils.isNotBlank(bo.getAreaName()), WmsBaseArea::getAreaName, bo.getAreaName())
.eq(StringUtils.isNotBlank(bo.getAreaType()), WmsBaseArea::getAreaType, bo.getAreaType())
.eq(StringUtils.isNotBlank(bo.getAreaManager()), WmsBaseArea::getAreaManager, bo.getAreaManager())
.eq(StringUtils.isNotBlank(bo.getActiveFlag()), WmsBaseArea::getActiveFlag, bo.getActiveFlag())
.orderByDesc(WmsBaseArea::getCreateTime);
return lqw;
}
/**
*
*
* @param bo
* @return
*/
@Override
public Boolean insertByBo(WmsBaseAreaBo bo) {
WmsBaseArea add = MapstructUtils.convert(bo, WmsBaseArea.class);
// WmsBaseWarehouseVo wmsBaseWarehouseVo = wmsBaseWarehouseMapper.selectVoById(bo.getWarehouseId());
// String houseCode = wmsBaseWarehouseVo.getWarehouseCode();
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setAreaId(add.getAreaId());
}
return flag;
}
/**
*
*
* @param bo
* @return
*/
@Override
public Boolean updateByBo(WmsBaseAreaBo bo) {
WmsBaseArea update = MapstructUtils.convert(bo, WmsBaseArea.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
*
*/
private void validEntityBeforeSave(WmsBaseArea entity){
//TODO 做一些数据校验,如唯一约束
//编号校验
UniqueCodeUtils.validateCodeUnique(
baseMapper,
entity.getAreaCode(),
WmsBaseArea::getAreaCode,
WmsBaseArea::getAreaId,
entity.getAreaId(),
"编号已存在"
);
//名称校验
UniqueCodeUtils.validateCodeUnique(
baseMapper,
entity.getAreaName(),
WmsBaseArea::getAreaName,
WmsBaseArea::getAreaId,
entity.getAreaId(),
"名称已存在"
);
}
/**
*
*
* @param ids
* @param isValid
* @return
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

@ -0,0 +1,7 @@
<?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="org.dromara.wms.mapper.WmsBaseAreaMapper">
</mapper>
Loading…
Cancel
Save