Commit 3a38a69fa549ea645219ef9f098aedf9f6e3c822

Authored by YunaiV
1 parent d8f9f0d0

feat(wms):调整 check 的实现

yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/md/item/WmsItemSkuController.java 0 → 100644
  1 +package cn.iocoder.yudao.module.wms.controller.admin.md.item;
  2 +
  3 +import cn.hutool.core.collection.CollUtil;
  4 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  5 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  6 +import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
  7 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
  8 +import cn.iocoder.yudao.module.wms.controller.admin.md.item.vo.sku.WmsItemSkuPageReqVO;
  9 +import cn.iocoder.yudao.module.wms.controller.admin.md.item.vo.sku.WmsItemSkuRespVO;
  10 +import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemBrandDO;
  11 +import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemCategoryDO;
  12 +import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemDO;
  13 +import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemSkuDO;
  14 +import cn.iocoder.yudao.module.wms.service.md.item.WmsItemBrandService;
  15 +import cn.iocoder.yudao.module.wms.service.md.item.WmsItemCategoryService;
  16 +import cn.iocoder.yudao.module.wms.service.md.item.WmsItemService;
  17 +import cn.iocoder.yudao.module.wms.service.md.item.WmsItemSkuService;
  18 +import io.swagger.v3.oas.annotations.Operation;
  19 +import io.swagger.v3.oas.annotations.tags.Tag;
  20 +import jakarta.annotation.Resource;
  21 +import jakarta.validation.Valid;
  22 +import org.springframework.security.access.prepost.PreAuthorize;
  23 +import org.springframework.validation.annotation.Validated;
  24 +import org.springframework.web.bind.annotation.GetMapping;
  25 +import org.springframework.web.bind.annotation.RequestMapping;
  26 +import org.springframework.web.bind.annotation.RestController;
  27 +
  28 +import java.util.Collections;
  29 +import java.util.List;
  30 +import java.util.Map;
  31 +
  32 +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
  33 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
  34 +
  35 +/**
  36 + * WMS 商品 SKU Controller。
  37 + *
  38 + * <p>SKU 维度的查询入口:弹窗 / 选择器场景使用,按 SKU 一行展开,支持商品 / 品牌 / 分类多表联查筛选。
  39 + * 复用商品权限 {@code wms:item:query},不单独建权限点(lite 也是商品/SKU 共用 {@code wms:item:list})。
  40 + *
  41 + * <p>SKU 的新增 / 修改 / 删除仍随商品弹窗一并维护,不在本 Controller 暴露。
  42 + */
  43 +@Tag(name = "管理后台 - WMS 商品 SKU")
  44 +@RestController
  45 +@RequestMapping("/wms/item-sku")
  46 +@Validated
  47 +public class WmsItemSkuController {
  48 +
  49 + @Resource
  50 + private WmsItemSkuService itemSkuService;
  51 + @Resource
  52 + private WmsItemService itemService;
  53 + @Resource
  54 + private WmsItemCategoryService categoryService;
  55 + @Resource
  56 + private WmsItemBrandService brandService;
  57 +
  58 + @GetMapping("/page")
  59 + @Operation(summary = "获得商品 SKU 分页", description = "按 SKU 维度分页,支持商品 / 品牌 / 分类多表联查筛选")
  60 + @PreAuthorize("@ss.hasPermission('wms:item:query')")
  61 + public CommonResult<PageResult<WmsItemSkuRespVO>> getItemSkuPage(@Valid WmsItemSkuPageReqVO pageReqVO) {
  62 + PageResult<WmsItemSkuDO> pageResult = itemSkuService.getItemSkuPage(pageReqVO);
  63 + return success(new PageResult<>(buildItemSkuRespVOList(pageResult.getList()), pageResult.getTotal()));
  64 + }
  65 +
  66 + // ==================== 拼接 VO ====================
  67 +
  68 + private List<WmsItemSkuRespVO> buildItemSkuRespVOList(List<WmsItemSkuDO> list) {
  69 + if (CollUtil.isEmpty(list)) {
  70 + return Collections.emptyList();
  71 + }
  72 + // 查询关联数据
  73 + Map<Long, WmsItemDO> itemMap = itemService.getItemMap(convertSet(list, WmsItemSkuDO::getItemId));
  74 + Map<Long, WmsItemCategoryDO> categoryMap = categoryService.getItemCategoryMap(
  75 + convertSet(itemMap.values(), WmsItemDO::getCategoryId));
  76 + Map<Long, WmsItemBrandDO> brandMap = brandService.getItemBrandMap(
  77 + convertSet(itemMap.values(), WmsItemDO::getBrandId));
  78 + // 拼接 VO
  79 + return BeanUtils.toBean(list, WmsItemSkuRespVO.class, vo -> MapUtils.findAndThen(itemMap, vo.getItemId(), item -> {
  80 + vo.setItemCode(item.getCode()).setItemName(item.getName()).setUnit(item.getUnit())
  81 + .setCategoryId(item.getCategoryId()).setBrandId(item.getBrandId());
  82 + MapUtils.findAndThen(categoryMap, item.getCategoryId(), category ->
  83 + vo.setCategoryName(category.getName()));
  84 + MapUtils.findAndThen(brandMap, item.getBrandId(), brand ->
  85 + vo.setBrandName(brand.getName()));
  86 + }));
  87 + }
  88 +
  89 +}
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/md/item/vo/sku/WmsItemSkuPageReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.wms.controller.admin.md.item.vo.sku;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageParam;
  4 +import io.swagger.v3.oas.annotations.media.Schema;
  5 +import lombok.Data;
  6 +import lombok.EqualsAndHashCode;
  7 +import lombok.ToString;
  8 +
  9 +@Schema(description = "管理后台 - WMS 商品 SKU 分页 Request VO")
  10 +@Data
  11 +@EqualsAndHashCode(callSuper = true)
  12 +@ToString(callSuper = true)
  13 +public class WmsItemSkuPageReqVO extends PageParam {
  14 +
  15 + @Schema(description = "商品编号", example = "I00000001")
  16 + private String itemCode;
  17 +
  18 + @Schema(description = "商品名称", example = "华为 nova flip")
  19 + private String itemName;
  20 +
  21 + @Schema(description = "商品分类编号", example = "1")
  22 + private Long categoryId;
  23 +
  24 + @Schema(description = "商品品牌编号", example = "1")
  25 + private Long brandId;
  26 +
  27 + @Schema(description = "规格编号", example = "S00000001")
  28 + private String code;
  29 +
  30 + @Schema(description = "规格名称", example = "黑色")
  31 + private String name;
  32 +
  33 + @Schema(description = "条码", example = "12345678")
  34 + private String barCode;
  35 +
  36 +}
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/md/item/WmsItemSkuMapper.java
1 package cn.iocoder.yudao.module.wms.dal.mysql.md.item; 1 package cn.iocoder.yudao.module.wms.dal.mysql.md.item;
2 2
3 import cn.hutool.core.collection.CollUtil; 3 import cn.hutool.core.collection.CollUtil;
  4 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 5 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
5 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; 6 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
  7 +import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX;
  8 +import cn.iocoder.yudao.module.wms.controller.admin.md.item.vo.sku.WmsItemSkuPageReqVO;
  9 +import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemDO;
6 import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemSkuDO; 10 import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemSkuDO;
7 import org.apache.ibatis.annotations.Mapper; 11 import org.apache.ibatis.annotations.Mapper;
8 12
@@ -18,6 +22,27 @@ import java.util.List; @@ -18,6 +22,27 @@ import java.util.List;
18 @Mapper 22 @Mapper
19 public interface WmsItemSkuMapper extends BaseMapperX<WmsItemSkuDO> { 23 public interface WmsItemSkuMapper extends BaseMapperX<WmsItemSkuDO> {
20 24
  25 + /**
  26 + * 按 SKU 维度分页查询,支持商品 / 品牌 / 分类多表联查筛选。
  27 + *
  28 + * 使用 {@link MPJLambdaWrapperX} 替代 lite 的手写 XML JOIN(见 lite
  29 + * {@code ItemSkuMapper.selectByBo}),范式参照本模块 {@code WmsInventoryMapper.selectPage}。
  30 + */
  31 + default PageResult<WmsItemSkuDO> selectPage(WmsItemSkuPageReqVO reqVO) {
  32 + MPJLambdaWrapperX<WmsItemSkuDO> query = new MPJLambdaWrapperX<WmsItemSkuDO>()
  33 + .selectAll(WmsItemSkuDO.class)
  34 + .innerJoin(WmsItemDO.class, WmsItemDO::getId, WmsItemSkuDO::getItemId)
  35 + .likeIfPresent(WmsItemDO::getCode, reqVO.getItemCode())
  36 + .likeIfPresent(WmsItemDO::getName, reqVO.getItemName())
  37 + .eqIfPresent(WmsItemDO::getCategoryId, reqVO.getCategoryId())
  38 + .eqIfPresent(WmsItemDO::getBrandId, reqVO.getBrandId())
  39 + .likeIfPresent(WmsItemSkuDO::getCode, reqVO.getCode())
  40 + .likeIfPresent(WmsItemSkuDO::getName, reqVO.getName())
  41 + .likeIfPresent(WmsItemSkuDO::getBarCode, reqVO.getBarCode())
  42 + .orderByDesc(WmsItemSkuDO::getId);
  43 + return selectJoinPage(reqVO, WmsItemSkuDO.class, query);
  44 + }
  45 +
21 default List<WmsItemSkuDO> selectListByItemId(Long itemId) { 46 default List<WmsItemSkuDO> selectListByItemId(Long itemId) {
22 return selectList(new LambdaQueryWrapperX<WmsItemSkuDO>() 47 return selectList(new LambdaQueryWrapperX<WmsItemSkuDO>()
23 .eq(WmsItemSkuDO::getItemId, itemId) 48 .eq(WmsItemSkuDO::getItemId, itemId)
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/dto/WmsInventoryCheckReqDTO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.wms.service.inventory.dto;
  2 +
  3 +import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum;
  4 +import lombok.Data;
  5 +
  6 +import java.math.BigDecimal;
  7 +import java.util.List;
  8 +
  9 +/**
  10 + * WMS 库存盘点请求 DTO
  11 + *
  12 + * @author 芋道源码
  13 + */
  14 +@Data
  15 +public class WmsInventoryCheckReqDTO {
  16 +
  17 + /**
  18 + * 单据编号
  19 + */
  20 + private Long orderId;
  21 + /**
  22 + * 单据号
  23 + */
  24 + private String orderNo;
  25 + /**
  26 + * 单据类型
  27 + *
  28 + * 枚举 {@link WmsOrderTypeEnum#getType()}
  29 + */
  30 + private Integer orderType;
  31 +
  32 + /**
  33 + * 库存盘点明细
  34 + */
  35 + private List<Item> items;
  36 +
  37 + /**
  38 + * WMS 库存盘点明细
  39 + */
  40 + @Data
  41 + public static class Item {
  42 +
  43 + /**
  44 + * 库存编号
  45 + */
  46 + private Long inventoryId;
  47 + /**
  48 + * SKU 编号
  49 + */
  50 + private Long skuId;
  51 + /**
  52 + * 仓库编号
  53 + */
  54 + private Long warehouseId;
  55 + /**
  56 + * 账面数量
  57 + */
  58 + private BigDecimal quantity;
  59 + /**
  60 + * 实盘数量
  61 + */
  62 + private BigDecimal checkQuantity;
  63 +
  64 + // ========= 单价备注相关字段 =========
  65 +
  66 + /**
  67 + * 单价
  68 + */
  69 + private BigDecimal price;
  70 + /**
  71 + * 备注
  72 + */
  73 + private String remark;
  74 +
  75 + }
  76 +
  77 +}