mirror of
https://gitee.com/zhijiantianya/ruoyi-vue-pro.git
synced 2026-06-06 02:38:38 +08:00
feat(wms):调整 check 的实现
This commit is contained in:
@ -0,0 +1,89 @@
|
||||
package cn.iocoder.yudao.module.wms.controller.admin.md.item;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.module.wms.controller.admin.md.item.vo.sku.WmsItemSkuPageReqVO;
|
||||
import cn.iocoder.yudao.module.wms.controller.admin.md.item.vo.sku.WmsItemSkuRespVO;
|
||||
import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemBrandDO;
|
||||
import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemCategoryDO;
|
||||
import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemDO;
|
||||
import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemSkuDO;
|
||||
import cn.iocoder.yudao.module.wms.service.md.item.WmsItemBrandService;
|
||||
import cn.iocoder.yudao.module.wms.service.md.item.WmsItemCategoryService;
|
||||
import cn.iocoder.yudao.module.wms.service.md.item.WmsItemService;
|
||||
import cn.iocoder.yudao.module.wms.service.md.item.WmsItemSkuService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.validation.Valid;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
|
||||
|
||||
/**
|
||||
* WMS 商品 SKU Controller。
|
||||
*
|
||||
* <p>SKU 维度的查询入口:弹窗 / 选择器场景使用,按 SKU 一行展开,支持商品 / 品牌 / 分类多表联查筛选。
|
||||
* 复用商品权限 {@code wms:item:query},不单独建权限点(lite 也是商品/SKU 共用 {@code wms:item:list})。
|
||||
*
|
||||
* <p>SKU 的新增 / 修改 / 删除仍随商品弹窗一并维护,不在本 Controller 暴露。
|
||||
*/
|
||||
@Tag(name = "管理后台 - WMS 商品 SKU")
|
||||
@RestController
|
||||
@RequestMapping("/wms/item-sku")
|
||||
@Validated
|
||||
public class WmsItemSkuController {
|
||||
|
||||
@Resource
|
||||
private WmsItemSkuService itemSkuService;
|
||||
@Resource
|
||||
private WmsItemService itemService;
|
||||
@Resource
|
||||
private WmsItemCategoryService categoryService;
|
||||
@Resource
|
||||
private WmsItemBrandService brandService;
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得商品 SKU 分页", description = "按 SKU 维度分页,支持商品 / 品牌 / 分类多表联查筛选")
|
||||
@PreAuthorize("@ss.hasPermission('wms:item:query')")
|
||||
public CommonResult<PageResult<WmsItemSkuRespVO>> getItemSkuPage(@Valid WmsItemSkuPageReqVO pageReqVO) {
|
||||
PageResult<WmsItemSkuDO> pageResult = itemSkuService.getItemSkuPage(pageReqVO);
|
||||
return success(new PageResult<>(buildItemSkuRespVOList(pageResult.getList()), pageResult.getTotal()));
|
||||
}
|
||||
|
||||
// ==================== 拼接 VO ====================
|
||||
|
||||
private List<WmsItemSkuRespVO> buildItemSkuRespVOList(List<WmsItemSkuDO> list) {
|
||||
if (CollUtil.isEmpty(list)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
// 查询关联数据
|
||||
Map<Long, WmsItemDO> itemMap = itemService.getItemMap(convertSet(list, WmsItemSkuDO::getItemId));
|
||||
Map<Long, WmsItemCategoryDO> categoryMap = categoryService.getItemCategoryMap(
|
||||
convertSet(itemMap.values(), WmsItemDO::getCategoryId));
|
||||
Map<Long, WmsItemBrandDO> brandMap = brandService.getItemBrandMap(
|
||||
convertSet(itemMap.values(), WmsItemDO::getBrandId));
|
||||
// 拼接 VO
|
||||
return BeanUtils.toBean(list, WmsItemSkuRespVO.class, vo -> MapUtils.findAndThen(itemMap, vo.getItemId(), item -> {
|
||||
vo.setItemCode(item.getCode()).setItemName(item.getName()).setUnit(item.getUnit())
|
||||
.setCategoryId(item.getCategoryId()).setBrandId(item.getBrandId());
|
||||
MapUtils.findAndThen(categoryMap, item.getCategoryId(), category ->
|
||||
vo.setCategoryName(category.getName()));
|
||||
MapUtils.findAndThen(brandMap, item.getBrandId(), brand ->
|
||||
vo.setBrandName(brand.getName()));
|
||||
}));
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,36 @@
|
||||
package cn.iocoder.yudao.module.wms.controller.admin.md.item.vo.sku;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
|
||||
@Schema(description = "管理后台 - WMS 商品 SKU 分页 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class WmsItemSkuPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "商品编号", example = "I00000001")
|
||||
private String itemCode;
|
||||
|
||||
@Schema(description = "商品名称", example = "华为 nova flip")
|
||||
private String itemName;
|
||||
|
||||
@Schema(description = "商品分类编号", example = "1")
|
||||
private Long categoryId;
|
||||
|
||||
@Schema(description = "商品品牌编号", example = "1")
|
||||
private Long brandId;
|
||||
|
||||
@Schema(description = "规格编号", example = "S00000001")
|
||||
private String code;
|
||||
|
||||
@Schema(description = "规格名称", example = "黑色")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "条码", example = "12345678")
|
||||
private String barCode;
|
||||
|
||||
}
|
||||
@ -1,8 +1,12 @@
|
||||
package cn.iocoder.yudao.module.wms.dal.mysql.md.item;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX;
|
||||
import cn.iocoder.yudao.module.wms.controller.admin.md.item.vo.sku.WmsItemSkuPageReqVO;
|
||||
import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemDO;
|
||||
import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemSkuDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@ -18,6 +22,27 @@ import java.util.List;
|
||||
@Mapper
|
||||
public interface WmsItemSkuMapper extends BaseMapperX<WmsItemSkuDO> {
|
||||
|
||||
/**
|
||||
* 按 SKU 维度分页查询,支持商品 / 品牌 / 分类多表联查筛选。
|
||||
*
|
||||
* 使用 {@link MPJLambdaWrapperX} 替代 lite 的手写 XML JOIN(见 lite
|
||||
* {@code ItemSkuMapper.selectByBo}),范式参照本模块 {@code WmsInventoryMapper.selectPage}。
|
||||
*/
|
||||
default PageResult<WmsItemSkuDO> selectPage(WmsItemSkuPageReqVO reqVO) {
|
||||
MPJLambdaWrapperX<WmsItemSkuDO> query = new MPJLambdaWrapperX<WmsItemSkuDO>()
|
||||
.selectAll(WmsItemSkuDO.class)
|
||||
.innerJoin(WmsItemDO.class, WmsItemDO::getId, WmsItemSkuDO::getItemId)
|
||||
.likeIfPresent(WmsItemDO::getCode, reqVO.getItemCode())
|
||||
.likeIfPresent(WmsItemDO::getName, reqVO.getItemName())
|
||||
.eqIfPresent(WmsItemDO::getCategoryId, reqVO.getCategoryId())
|
||||
.eqIfPresent(WmsItemDO::getBrandId, reqVO.getBrandId())
|
||||
.likeIfPresent(WmsItemSkuDO::getCode, reqVO.getCode())
|
||||
.likeIfPresent(WmsItemSkuDO::getName, reqVO.getName())
|
||||
.likeIfPresent(WmsItemSkuDO::getBarCode, reqVO.getBarCode())
|
||||
.orderByDesc(WmsItemSkuDO::getId);
|
||||
return selectJoinPage(reqVO, WmsItemSkuDO.class, query);
|
||||
}
|
||||
|
||||
default List<WmsItemSkuDO> selectListByItemId(Long itemId) {
|
||||
return selectList(new LambdaQueryWrapperX<WmsItemSkuDO>()
|
||||
.eq(WmsItemSkuDO::getItemId, itemId)
|
||||
|
||||
@ -0,0 +1,77 @@
|
||||
package cn.iocoder.yudao.module.wms.service.inventory.dto;
|
||||
|
||||
import cn.iocoder.yudao.module.wms.enums.order.WmsOrderTypeEnum;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* WMS 库存盘点请求 DTO
|
||||
*
|
||||
* @author 芋道源码
|
||||
*/
|
||||
@Data
|
||||
public class WmsInventoryCheckReqDTO {
|
||||
|
||||
/**
|
||||
* 单据编号
|
||||
*/
|
||||
private Long orderId;
|
||||
/**
|
||||
* 单据号
|
||||
*/
|
||||
private String orderNo;
|
||||
/**
|
||||
* 单据类型
|
||||
*
|
||||
* 枚举 {@link WmsOrderTypeEnum#getType()}
|
||||
*/
|
||||
private Integer orderType;
|
||||
|
||||
/**
|
||||
* 库存盘点明细
|
||||
*/
|
||||
private List<Item> items;
|
||||
|
||||
/**
|
||||
* WMS 库存盘点明细
|
||||
*/
|
||||
@Data
|
||||
public static class Item {
|
||||
|
||||
/**
|
||||
* 库存编号
|
||||
*/
|
||||
private Long inventoryId;
|
||||
/**
|
||||
* SKU 编号
|
||||
*/
|
||||
private Long skuId;
|
||||
/**
|
||||
* 仓库编号
|
||||
*/
|
||||
private Long warehouseId;
|
||||
/**
|
||||
* 账面数量
|
||||
*/
|
||||
private BigDecimal quantity;
|
||||
/**
|
||||
* 实盘数量
|
||||
*/
|
||||
private BigDecimal checkQuantity;
|
||||
|
||||
// ========= 单价备注相关字段 =========
|
||||
|
||||
/**
|
||||
* 单价
|
||||
*/
|
||||
private BigDecimal price;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user