From 1e0a8e65ab5a9834695539cf797cdd9aa4472f90 Mon Sep 17 00:00:00 2001 From: "zangch@mesnac.com" Date: Mon, 4 Aug 2025 15:07:13 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms):=20=E6=B7=BB=E5=8A=A0=E5=8C=BA?= =?UTF-8?q?=E5=9F=9F=E5=9F=BA=E7=A1=80=E4=BF=A1=E6=81=AF=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加数据校验逻辑,确保区域编码和名称的唯一性 --- .../wms/controller/WmsBaseAreaController.java | 117 ++++++++++++ .../org/dromara/wms/domain/WmsBaseArea.java | 84 +++++++++ .../dromara/wms/domain/bo/WmsBaseAreaBo.java | 64 +++++++ .../dromara/wms/domain/vo/WmsBaseAreaVo.java | 93 ++++++++++ .../dromara/wms/mapper/WmsBaseAreaMapper.java | 15 ++ .../wms/service/IWmsBaseAreaService.java | 69 +++++++ .../service/impl/WmsBaseAreaServiceImpl.java | 174 ++++++++++++++++++ .../mapper/wms/WmsBaseAreaMapper.xml | 7 + 8 files changed, 623 insertions(+) create mode 100644 ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/controller/WmsBaseAreaController.java create mode 100644 ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsBaseArea.java create mode 100644 ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/bo/WmsBaseAreaBo.java create mode 100644 ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/vo/WmsBaseAreaVo.java create mode 100644 ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/mapper/WmsBaseAreaMapper.java create mode 100644 ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/IWmsBaseAreaService.java create mode 100644 ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsBaseAreaServiceImpl.java create mode 100644 ruoyi-modules/hwmom-wms/src/main/resources/mapper/wms/WmsBaseAreaMapper.xml diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/controller/WmsBaseAreaController.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/controller/WmsBaseAreaController.java new file mode 100644 index 0000000..37a7fac --- /dev/null +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/controller/WmsBaseAreaController.java @@ -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 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 list = wmsBaseAreaService.queryList(bo); + ExcelUtil.exportExcel(list, "区域基础信息", WmsBaseAreaVo.class, response); + } + + /** + * 获取区域基础信息详细信息 + * + * @param areaId 主键 + */ + @SaCheckPermission("wms:wmsBaseArea:query") + @GetMapping("/{areaId}") + public R 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 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 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 remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] areaIds) { + return toAjax(wmsBaseAreaService.deleteWithValidByIds(List.of(areaIds), true)); + } + + + /** + * 下拉框查询区域基础信息列表 + */ + + @GetMapping("/getWmsBaseAreaList") + public R> getWmsBaseAreaList(WmsBaseAreaBo bo) { + List list = wmsBaseAreaService.queryList(bo); + return R.ok(list); + } +} diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsBaseArea.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsBaseArea.java new file mode 100644 index 0000000..ecfa8c4 --- /dev/null +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/WmsBaseArea.java @@ -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 + +} diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/bo/WmsBaseAreaBo.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/bo/WmsBaseAreaBo.java new file mode 100644 index 0000000..09fb851 --- /dev/null +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/bo/WmsBaseAreaBo.java @@ -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; + + +} diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/vo/WmsBaseAreaVo.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/vo/WmsBaseAreaVo.java new file mode 100644 index 0000000..5eaf204 --- /dev/null +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/domain/vo/WmsBaseAreaVo.java @@ -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 + + + +} diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/mapper/WmsBaseAreaMapper.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/mapper/WmsBaseAreaMapper.java new file mode 100644 index 0000000..e0ca378 --- /dev/null +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/mapper/WmsBaseAreaMapper.java @@ -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 { + +} diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/IWmsBaseAreaService.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/IWmsBaseAreaService.java new file mode 100644 index 0000000..504c68f --- /dev/null +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/IWmsBaseAreaService.java @@ -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 queryPageList(WmsBaseAreaBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的区域基础信息列表 + * + * @param bo 查询条件 + * @return 区域基础信息列表 + */ + List 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 ids, Boolean isValid); +} diff --git a/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsBaseAreaServiceImpl.java b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsBaseAreaServiceImpl.java new file mode 100644 index 0000000..1583592 --- /dev/null +++ b/ruoyi-modules/hwmom-wms/src/main/java/org/dromara/wms/service/impl/WmsBaseAreaServiceImpl.java @@ -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 queryPageList(WmsBaseAreaBo bo, PageQuery pageQuery) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的区域基础信息列表 + * + * @param bo 查询条件 + * @return 区域基础信息列表 + */ + @Override + public List queryList(WmsBaseAreaBo bo) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private MPJLambdaWrapper buildQueryWrapper(WmsBaseAreaBo bo) { + Map params = bo.getParams(); + MPJLambdaWrapper 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 ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/hwmom-wms/src/main/resources/mapper/wms/WmsBaseAreaMapper.xml b/ruoyi-modules/hwmom-wms/src/main/resources/mapper/wms/WmsBaseAreaMapper.xml new file mode 100644 index 0000000..88b6479 --- /dev/null +++ b/ruoyi-modules/hwmom-wms/src/main/resources/mapper/wms/WmsBaseAreaMapper.xml @@ -0,0 +1,7 @@ + + + + +