Commit ccaae6675e517319a97cbc9bbeea7e7853054123

Authored by YunaiV
1 parent 3fcae795

feat(wms):增加 inventory history

Showing 14 changed files with 690 additions and 0 deletions
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/inventory/WmsInventoryDetailController.java 0 → 100644
  1 +package cn.iocoder.yudao.module.wms.controller.admin.inventory;
  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.inventory.vo.detail.WmsInventoryDetailPageReqVO;
  9 +import cn.iocoder.yudao.module.wms.controller.admin.inventory.vo.detail.WmsInventoryDetailRespVO;
  10 +import cn.iocoder.yudao.module.wms.dal.dataobject.inventory.WmsInventoryDetailDO;
  11 +import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemDO;
  12 +import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemSkuDO;
  13 +import cn.iocoder.yudao.module.wms.dal.dataobject.md.warehouse.WmsWarehouseAreaDO;
  14 +import cn.iocoder.yudao.module.wms.dal.dataobject.md.warehouse.WmsWarehouseDO;
  15 +import cn.iocoder.yudao.module.wms.framework.config.WmsProperties;
  16 +import cn.iocoder.yudao.module.wms.service.inventory.WmsInventoryDetailService;
  17 +import cn.iocoder.yudao.module.wms.service.md.item.WmsItemService;
  18 +import cn.iocoder.yudao.module.wms.service.md.item.WmsItemSkuService;
  19 +import cn.iocoder.yudao.module.wms.service.md.warehouse.WmsWarehouseAreaService;
  20 +import cn.iocoder.yudao.module.wms.service.md.warehouse.WmsWarehouseService;
  21 +import io.swagger.v3.oas.annotations.Operation;
  22 +import io.swagger.v3.oas.annotations.tags.Tag;
  23 +import jakarta.annotation.Resource;
  24 +import jakarta.validation.Valid;
  25 +import org.springframework.security.access.prepost.PreAuthorize;
  26 +import org.springframework.validation.annotation.Validated;
  27 +import org.springframework.web.bind.annotation.GetMapping;
  28 +import org.springframework.web.bind.annotation.RequestMapping;
  29 +import org.springframework.web.bind.annotation.RestController;
  30 +
  31 +import java.util.Collections;
  32 +import java.util.List;
  33 +import java.util.Map;
  34 +
  35 +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
  36 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
  37 +
  38 +@Tag(name = "管理后台 - WMS 库存明细")
  39 +@RestController
  40 +@RequestMapping("/wms/inventory-detail")
  41 +@Validated
  42 +public class WmsInventoryDetailController {
  43 +
  44 + @Resource
  45 + private WmsInventoryDetailService inventoryDetailService;
  46 + @Resource
  47 + private WmsItemService itemService;
  48 + @Resource
  49 + private WmsItemSkuService itemSkuService;
  50 + @Resource
  51 + private WmsWarehouseService warehouseService;
  52 + @Resource
  53 + private WmsWarehouseAreaService warehouseAreaService;
  54 + @Resource
  55 + private WmsProperties wmsProperties;
  56 +
  57 + @GetMapping("/page")
  58 + @Operation(summary = "获得库存明细分页")
  59 + @PreAuthorize("@ss.hasPermission('wms:inventory-detail:query')")
  60 + public CommonResult<PageResult<WmsInventoryDetailRespVO>> getInventoryDetailPage(
  61 + @Valid WmsInventoryDetailPageReqVO pageReqVO) {
  62 + PageResult<WmsInventoryDetailDO> pageResult = inventoryDetailService.getInventoryDetailPage(pageReqVO);
  63 + return success(new PageResult<>(buildInventoryDetailRespVOList(pageResult.getList()), pageResult.getTotal()));
  64 + }
  65 +
  66 + // ==================== 拼接 VO ====================
  67 +
  68 + private List<WmsInventoryDetailRespVO> buildInventoryDetailRespVOList(List<WmsInventoryDetailDO> list) {
  69 + if (CollUtil.isEmpty(list)) {
  70 + return Collections.emptyList();
  71 + }
  72 + Map<Long, WmsItemSkuDO> skuMap = itemSkuService.getItemSkuMap(convertSet(list, WmsInventoryDetailDO::getSkuId));
  73 + Map<Long, WmsItemDO> itemMap = itemService.getItemMap(convertSet(skuMap.values(), WmsItemSkuDO::getItemId));
  74 + Map<Long, WmsWarehouseDO> warehouseMap = warehouseService.getWarehouseMap(
  75 + convertSet(list, WmsInventoryDetailDO::getWarehouseId));
  76 + Map<Long, WmsWarehouseAreaDO> areaMap = wmsProperties.isAreaEnabled()
  77 + ? warehouseAreaService.getWarehouseAreaMap(convertSet(list, WmsInventoryDetailDO::getAreaId))
  78 + : Collections.emptyMap();
  79 + return BeanUtils.toBean(list, WmsInventoryDetailRespVO.class, vo -> {
  80 + MapUtils.findAndThen(skuMap, vo.getSkuId(), sku -> {
  81 + vo.setSkuCode(sku.getCode()).setSkuName(sku.getName()).setItemId(sku.getItemId());
  82 + MapUtils.findAndThen(itemMap, sku.getItemId(), item -> vo.setItemCode(item.getCode())
  83 + .setItemName(item.getName()).setUnit(item.getUnit()));
  84 + });
  85 + MapUtils.findAndThen(warehouseMap, vo.getWarehouseId(), warehouse -> vo.setWarehouseName(warehouse.getName()));
  86 + MapUtils.findAndThen(areaMap, vo.getAreaId(), area -> vo.setAreaName(area.getName()));
  87 + });
  88 + }
  89 +
  90 +}
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/inventory/WmsInventoryHistoryController.java 0 → 100644
  1 +package cn.iocoder.yudao.module.wms.controller.admin.inventory;
  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.inventory.vo.history.WmsInventoryHistoryPageReqVO;
  9 +import cn.iocoder.yudao.module.wms.controller.admin.inventory.vo.history.WmsInventoryHistoryRespVO;
  10 +import cn.iocoder.yudao.module.wms.dal.dataobject.inventory.WmsInventoryHistoryDO;
  11 +import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemDO;
  12 +import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemSkuDO;
  13 +import cn.iocoder.yudao.module.wms.dal.dataobject.md.warehouse.WmsWarehouseAreaDO;
  14 +import cn.iocoder.yudao.module.wms.dal.dataobject.md.warehouse.WmsWarehouseDO;
  15 +import cn.iocoder.yudao.module.wms.framework.config.WmsProperties;
  16 +import cn.iocoder.yudao.module.wms.service.inventory.WmsInventoryHistoryService;
  17 +import cn.iocoder.yudao.module.wms.service.md.item.WmsItemService;
  18 +import cn.iocoder.yudao.module.wms.service.md.item.WmsItemSkuService;
  19 +import cn.iocoder.yudao.module.wms.service.md.warehouse.WmsWarehouseAreaService;
  20 +import cn.iocoder.yudao.module.wms.service.md.warehouse.WmsWarehouseService;
  21 +import io.swagger.v3.oas.annotations.Operation;
  22 +import io.swagger.v3.oas.annotations.tags.Tag;
  23 +import jakarta.annotation.Resource;
  24 +import jakarta.validation.Valid;
  25 +import org.springframework.security.access.prepost.PreAuthorize;
  26 +import org.springframework.validation.annotation.Validated;
  27 +import org.springframework.web.bind.annotation.GetMapping;
  28 +import org.springframework.web.bind.annotation.RequestMapping;
  29 +import org.springframework.web.bind.annotation.RestController;
  30 +
  31 +import java.util.Collections;
  32 +import java.util.List;
  33 +import java.util.Map;
  34 +
  35 +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
  36 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
  37 +
  38 +@Tag(name = "管理后台 - WMS 库存流水")
  39 +@RestController
  40 +@RequestMapping("/wms/inventory-history")
  41 +@Validated
  42 +public class WmsInventoryHistoryController {
  43 +
  44 + @Resource
  45 + private WmsInventoryHistoryService inventoryHistoryService;
  46 + @Resource
  47 + private WmsItemService itemService;
  48 + @Resource
  49 + private WmsItemSkuService itemSkuService;
  50 + @Resource
  51 + private WmsWarehouseService warehouseService;
  52 + @Resource
  53 + private WmsWarehouseAreaService warehouseAreaService;
  54 + @Resource
  55 + private WmsProperties wmsProperties;
  56 +
  57 + @GetMapping("/page")
  58 + @Operation(summary = "获得库存流水分页")
  59 + @PreAuthorize("@ss.hasPermission('wms:inventory-history:query')")
  60 + public CommonResult<PageResult<WmsInventoryHistoryRespVO>> getInventoryHistoryPage(
  61 + @Valid WmsInventoryHistoryPageReqVO pageReqVO) {
  62 + PageResult<WmsInventoryHistoryDO> pageResult = inventoryHistoryService.getInventoryHistoryPage(pageReqVO);
  63 + return success(new PageResult<>(buildInventoryHistoryRespVOList(pageResult.getList()), pageResult.getTotal()));
  64 + }
  65 +
  66 + // ==================== 拼接 VO ====================
  67 +
  68 + private List<WmsInventoryHistoryRespVO> buildInventoryHistoryRespVOList(List<WmsInventoryHistoryDO> list) {
  69 + if (CollUtil.isEmpty(list)) {
  70 + return Collections.emptyList();
  71 + }
  72 + Map<Long, WmsItemSkuDO> skuMap = itemSkuService.getItemSkuMap(convertSet(list, WmsInventoryHistoryDO::getSkuId));
  73 + Map<Long, WmsItemDO> itemMap = itemService.getItemMap(convertSet(skuMap.values(), WmsItemSkuDO::getItemId));
  74 + Map<Long, WmsWarehouseDO> warehouseMap = warehouseService.getWarehouseMap(
  75 + convertSet(list, WmsInventoryHistoryDO::getWarehouseId));
  76 + Map<Long, WmsWarehouseAreaDO> areaMap = wmsProperties.isAreaEnabled()
  77 + ? warehouseAreaService.getWarehouseAreaMap(convertSet(list, WmsInventoryHistoryDO::getAreaId))
  78 + : Collections.emptyMap();
  79 + return BeanUtils.toBean(list, WmsInventoryHistoryRespVO.class, vo -> {
  80 + MapUtils.findAndThen(skuMap, vo.getSkuId(), sku -> {
  81 + vo.setSkuCode(sku.getCode()).setSkuName(sku.getName()).setItemId(sku.getItemId());
  82 + MapUtils.findAndThen(itemMap, sku.getItemId(), item -> vo.setItemCode(item.getCode())
  83 + .setItemName(item.getName()).setUnit(item.getUnit()));
  84 + });
  85 + MapUtils.findAndThen(warehouseMap, vo.getWarehouseId(), warehouse -> vo.setWarehouseName(warehouse.getName()));
  86 + MapUtils.findAndThen(areaMap, vo.getAreaId(), area -> vo.setAreaName(area.getName()));
  87 + });
  88 + }
  89 +
  90 +}
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/inventory/vo/detail/WmsInventoryDetailPageReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.wms.controller.admin.inventory.vo.detail;
  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 +import org.springframework.format.annotation.DateTimeFormat;
  9 +
  10 +import java.time.LocalDateTime;
  11 +
  12 +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
  13 +
  14 +@Schema(description = "管理后台 - WMS 库存明细分页 Request VO")
  15 +@Data
  16 +@EqualsAndHashCode(callSuper = true)
  17 +@ToString(callSuper = true)
  18 +public class WmsInventoryDetailPageReqVO extends PageParam {
  19 +
  20 + /**
  21 + * 按仓库库区维度统计
  22 + */
  23 + public static final String TYPE_WAREHOUSE = "warehouse";
  24 + /**
  25 + * 按商品维度统计
  26 + */
  27 + public static final String TYPE_ITEM = "item";
  28 +
  29 + @Schema(description = "统计维度", example = "warehouse")
  30 + private String type;
  31 +
  32 + @Schema(description = "商品编号", example = "ITEM001")
  33 + private String itemCode;
  34 +
  35 + @Schema(description = "商品名称", example = "红富士苹果")
  36 + private String itemName;
  37 +
  38 + @Schema(description = "商品 SKU 编号", example = "1024")
  39 + private Long skuId;
  40 +
  41 + @Schema(description = "规格编号", example = "SKU001")
  42 + private String skuCode;
  43 +
  44 + @Schema(description = "规格名称", example = "10kg 箱装")
  45 + private String skuName;
  46 +
  47 + @Schema(description = "仓库编号", example = "2048")
  48 + private Long warehouseId;
  49 +
  50 + @Schema(description = "库区编号", example = "4096")
  51 + private Long areaId;
  52 +
  53 + @Schema(description = "批号", example = "BATCH001")
  54 + private String batchNo;
  55 +
  56 + @Schema(description = "过期日期")
  57 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  58 + private LocalDateTime[] expirationDate;
  59 +
  60 + @Schema(description = "创建时间")
  61 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  62 + private LocalDateTime[] createTime;
  63 +
  64 +}
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/inventory/vo/detail/WmsInventoryDetailRespVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.wms.controller.admin.inventory.vo.detail;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import lombok.Data;
  5 +
  6 +import java.math.BigDecimal;
  7 +import java.time.LocalDateTime;
  8 +
  9 +@Schema(description = "管理后台 - WMS 库存明细 Response VO")
  10 +@Data
  11 +public class WmsInventoryDetailRespVO {
  12 +
  13 + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
  14 + private Long id;
  15 +
  16 + @Schema(description = "商品编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048")
  17 + private Long itemId;
  18 + @Schema(description = "商品编码", example = "ITEM001")
  19 + private String itemCode;
  20 + @Schema(description = "商品名称", example = "红富士苹果")
  21 + private String itemName;
  22 + @Schema(description = "商品单位", example = "箱")
  23 + private String unit;
  24 +
  25 + @Schema(description = "商品 SKU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "4096")
  26 + private Long skuId;
  27 + @Schema(description = "规格编号", example = "SKU001")
  28 + private String skuCode;
  29 + @Schema(description = "规格名称", example = "10kg 箱装")
  30 + private String skuName;
  31 +
  32 + @Schema(description = "仓库编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "8192")
  33 + private Long warehouseId;
  34 + @Schema(description = "仓库名称", example = "成品仓")
  35 + private String warehouseName;
  36 + @Schema(description = "库区编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
  37 + private Long areaId;
  38 + @Schema(description = "库区名称", example = "A 区")
  39 + private String areaName;
  40 +
  41 + @Schema(description = "数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00")
  42 + private BigDecimal quantity;
  43 + @Schema(description = "剩余数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "60.00")
  44 + private BigDecimal remainQuantity;
  45 + @Schema(description = "批号", example = "BATCH001")
  46 + private String batchNo;
  47 + @Schema(description = "生产日期")
  48 + private LocalDateTime productionDate;
  49 + @Schema(description = "过期日期")
  50 + private LocalDateTime expirationDate;
  51 + @Schema(description = "金额", example = "1000.00")
  52 + private BigDecimal amount;
  53 + @Schema(description = "备注", example = "备注")
  54 + private String remark;
  55 +
  56 + @Schema(description = "操作单编号", example = "1024")
  57 + private Long orderId;
  58 + @Schema(description = "操作单号", example = "RK202605110001")
  59 + private String orderNo;
  60 + @Schema(description = "操作类型", example = "1")
  61 + private Integer orderType;
  62 + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
  63 + private LocalDateTime createTime;
  64 +
  65 +}
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/inventory/vo/history/WmsInventoryHistoryPageReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.wms.controller.admin.inventory.vo.history;
  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 +import org.springframework.format.annotation.DateTimeFormat;
  9 +
  10 +import java.time.LocalDateTime;
  11 +
  12 +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
  13 +
  14 +@Schema(description = "管理后台 - WMS 库存流水分页 Request VO")
  15 +@Data
  16 +@EqualsAndHashCode(callSuper = true)
  17 +@ToString(callSuper = true)
  18 +public class WmsInventoryHistoryPageReqVO extends PageParam {
  19 +
  20 + @Schema(description = "商品编号", example = "ITEM001")
  21 + private String itemCode;
  22 +
  23 + @Schema(description = "商品名称", example = "红富士苹果")
  24 + private String itemName;
  25 +
  26 + @Schema(description = "商品 SKU 编号", example = "1024")
  27 + private Long skuId;
  28 +
  29 + @Schema(description = "规格编号", example = "SKU001")
  30 + private String skuCode;
  31 +
  32 + @Schema(description = "规格名称", example = "10kg 箱装")
  33 + private String skuName;
  34 +
  35 + @Schema(description = "仓库编号", example = "2048")
  36 + private Long warehouseId;
  37 +
  38 + @Schema(description = "库区编号", example = "4096")
  39 + private Long areaId;
  40 +
  41 + @Schema(description = "操作单号", example = "RK202605110001")
  42 + private String orderNo;
  43 +
  44 + @Schema(description = "操作类型", example = "1")
  45 + private Integer orderType;
  46 +
  47 + @Schema(description = "操作时间")
  48 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  49 + private LocalDateTime[] createTime;
  50 +
  51 +}
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/inventory/vo/history/WmsInventoryHistoryRespVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.wms.controller.admin.inventory.vo.history;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import lombok.Data;
  5 +
  6 +import java.math.BigDecimal;
  7 +import java.time.LocalDateTime;
  8 +
  9 +@Schema(description = "管理后台 - WMS 库存流水 Response VO")
  10 +@Data
  11 +public class WmsInventoryHistoryRespVO {
  12 +
  13 + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
  14 + private Long id;
  15 +
  16 + @Schema(description = "商品编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048")
  17 + private Long itemId;
  18 + @Schema(description = "商品编码", example = "ITEM001")
  19 + private String itemCode;
  20 + @Schema(description = "商品名称", example = "红富士苹果")
  21 + private String itemName;
  22 + @Schema(description = "商品单位", example = "箱")
  23 + private String unit;
  24 +
  25 + @Schema(description = "商品 SKU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "4096")
  26 + private Long skuId;
  27 + @Schema(description = "规格编号", example = "SKU001")
  28 + private String skuCode;
  29 + @Schema(description = "规格名称", example = "10kg 箱装")
  30 + private String skuName;
  31 +
  32 + @Schema(description = "仓库编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "8192")
  33 + private Long warehouseId;
  34 + @Schema(description = "仓库名称", example = "成品仓")
  35 + private String warehouseName;
  36 + @Schema(description = "库区编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
  37 + private Long areaId;
  38 + @Schema(description = "库区名称", example = "A 区")
  39 + private String areaName;
  40 +
  41 + @Schema(description = "库存变化数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "10.00")
  42 + private BigDecimal quantity;
  43 + @Schema(description = "变化前库存数量", example = "90.00")
  44 + private BigDecimal beforeQuantity;
  45 + @Schema(description = "变化后库存数量", example = "100.00")
  46 + private BigDecimal afterQuantity;
  47 + @Schema(description = "批号", example = "BATCH001")
  48 + private String batchNo;
  49 + @Schema(description = "生产日期")
  50 + private LocalDateTime productionDate;
  51 + @Schema(description = "过期日期")
  52 + private LocalDateTime expirationDate;
  53 + @Schema(description = "金额", example = "1000.00")
  54 + private BigDecimal amount;
  55 + @Schema(description = "备注", example = "备注")
  56 + private String remark;
  57 +
  58 + @Schema(description = "操作单编号", example = "1024")
  59 + private Long orderId;
  60 + @Schema(description = "操作单号", example = "RK202605110001")
  61 + private String orderNo;
  62 + @Schema(description = "操作类型", example = "1")
  63 + private Integer orderType;
  64 + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
  65 + private LocalDateTime createTime;
  66 +
  67 +}
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/inventory/WmsInventoryDetailMapper.java 0 → 100644
  1 +package cn.iocoder.yudao.module.wms.dal.mysql.inventory;
  2 +
  3 +import cn.hutool.core.util.StrUtil;
  4 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  5 +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
  6 +import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX;
  7 +import cn.iocoder.yudao.module.wms.controller.admin.inventory.vo.detail.WmsInventoryDetailPageReqVO;
  8 +import cn.iocoder.yudao.module.wms.dal.dataobject.inventory.WmsInventoryDetailDO;
  9 +import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemDO;
  10 +import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemSkuDO;
  11 +import org.apache.ibatis.annotations.Mapper;
  12 +
  13 +/**
  14 + * WMS 库存明细 Mapper
  15 + *
  16 + * @author 芋道源码
  17 + */
  18 +@Mapper
  19 +public interface WmsInventoryDetailMapper extends BaseMapperX<WmsInventoryDetailDO> {
  20 +
  21 + default PageResult<WmsInventoryDetailDO> selectPage(WmsInventoryDetailPageReqVO reqVO) {
  22 + MPJLambdaWrapperX<WmsInventoryDetailDO> query = new MPJLambdaWrapperX<WmsInventoryDetailDO>()
  23 + .selectAll(WmsInventoryDetailDO.class)
  24 + .innerJoin(WmsItemSkuDO.class, WmsItemSkuDO::getId, WmsInventoryDetailDO::getSkuId)
  25 + .innerJoin(WmsItemDO.class, WmsItemDO::getId, WmsItemSkuDO::getItemId)
  26 + .likeIfPresent(WmsItemDO::getCode, reqVO.getItemCode())
  27 + .likeIfPresent(WmsItemDO::getName, reqVO.getItemName())
  28 + .eqIfPresent(WmsInventoryDetailDO::getSkuId, reqVO.getSkuId())
  29 + .likeIfPresent(WmsItemSkuDO::getCode, reqVO.getSkuCode())
  30 + .likeIfPresent(WmsItemSkuDO::getName, reqVO.getSkuName())
  31 + .eqIfPresent(WmsInventoryDetailDO::getWarehouseId, reqVO.getWarehouseId())
  32 + .eqIfPresent(WmsInventoryDetailDO::getAreaId, reqVO.getAreaId())
  33 + .likeIfPresent(WmsInventoryDetailDO::getBatchNo, reqVO.getBatchNo())
  34 + .betweenIfPresent(WmsInventoryDetailDO::getExpirationDate, reqVO.getExpirationDate())
  35 + .betweenIfPresent(WmsInventoryDetailDO::getCreateTime, reqVO.getCreateTime());
  36 + appendDimensionOrder(query, reqVO.getType());
  37 + return selectJoinPage(reqVO, WmsInventoryDetailDO.class, query);
  38 + }
  39 +
  40 + private static void appendDimensionOrder(MPJLambdaWrapperX<WmsInventoryDetailDO> query, String type) {
  41 + if (StrUtil.equals(WmsInventoryDetailPageReqVO.TYPE_WAREHOUSE, type)) {
  42 + query.orderByAsc(WmsInventoryDetailDO::getWarehouseId)
  43 + .orderByAsc(WmsInventoryDetailDO::getAreaId)
  44 + .orderByAsc(WmsItemSkuDO::getItemId)
  45 + .orderByAsc(WmsInventoryDetailDO::getSkuId)
  46 + .orderByAsc(WmsInventoryDetailDO::getId);
  47 + return;
  48 + }
  49 + if (StrUtil.equals(WmsInventoryDetailPageReqVO.TYPE_ITEM, type)) {
  50 + query.orderByAsc(WmsItemSkuDO::getItemId)
  51 + .orderByAsc(WmsInventoryDetailDO::getSkuId)
  52 + .orderByAsc(WmsInventoryDetailDO::getWarehouseId)
  53 + .orderByAsc(WmsInventoryDetailDO::getAreaId)
  54 + .orderByAsc(WmsInventoryDetailDO::getId);
  55 + return;
  56 + }
  57 + throw new IllegalArgumentException("未知库存明细统计维度:" + type);
  58 + }
  59 +
  60 +}
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/inventory/WmsInventoryHistoryMapper.java 0 → 100644
  1 +package cn.iocoder.yudao.module.wms.dal.mysql.inventory;
  2 +
  3 +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.query.MPJLambdaWrapperX;
  6 +import cn.iocoder.yudao.module.wms.controller.admin.inventory.vo.history.WmsInventoryHistoryPageReqVO;
  7 +import cn.iocoder.yudao.module.wms.dal.dataobject.inventory.WmsInventoryHistoryDO;
  8 +import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemDO;
  9 +import cn.iocoder.yudao.module.wms.dal.dataobject.md.item.WmsItemSkuDO;
  10 +import org.apache.ibatis.annotations.Mapper;
  11 +
  12 +/**
  13 + * WMS 库存流水 Mapper
  14 + *
  15 + * @author 芋道源码
  16 + */
  17 +@Mapper
  18 +public interface WmsInventoryHistoryMapper extends BaseMapperX<WmsInventoryHistoryDO> {
  19 +
  20 + default PageResult<WmsInventoryHistoryDO> selectPage(WmsInventoryHistoryPageReqVO reqVO) {
  21 + MPJLambdaWrapperX<WmsInventoryHistoryDO> query = new MPJLambdaWrapperX<WmsInventoryHistoryDO>()
  22 + .selectAll(WmsInventoryHistoryDO.class)
  23 + .leftJoin(WmsItemSkuDO.class, WmsItemSkuDO::getId, WmsInventoryHistoryDO::getSkuId)
  24 + .leftJoin(WmsItemDO.class, WmsItemDO::getId, WmsItemSkuDO::getItemId)
  25 + .likeIfPresent(WmsItemDO::getCode, reqVO.getItemCode())
  26 + .likeIfPresent(WmsItemDO::getName, reqVO.getItemName())
  27 + .eqIfPresent(WmsInventoryHistoryDO::getSkuId, reqVO.getSkuId())
  28 + .likeIfPresent(WmsItemSkuDO::getCode, reqVO.getSkuCode())
  29 + .likeIfPresent(WmsItemSkuDO::getName, reqVO.getSkuName())
  30 + .eqIfPresent(WmsInventoryHistoryDO::getWarehouseId, reqVO.getWarehouseId())
  31 + .eqIfPresent(WmsInventoryHistoryDO::getAreaId, reqVO.getAreaId())
  32 + .eqIfPresent(WmsInventoryHistoryDO::getOrderNo, reqVO.getOrderNo())
  33 + .eqIfPresent(WmsInventoryHistoryDO::getOrderType, reqVO.getOrderType())
  34 + .betweenIfPresent(WmsInventoryHistoryDO::getCreateTime, reqVO.getCreateTime())
  35 + .orderByDesc(WmsInventoryHistoryDO::getCreateTime)
  36 + .orderByDesc(WmsInventoryHistoryDO::getId);
  37 + return selectJoinPage(reqVO, WmsInventoryHistoryDO.class, query);
  38 + }
  39 +
  40 +}
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryDetailService.java 0 → 100644
  1 +package cn.iocoder.yudao.module.wms.service.inventory;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.module.wms.controller.admin.inventory.vo.detail.WmsInventoryDetailPageReqVO;
  5 +import cn.iocoder.yudao.module.wms.dal.dataobject.inventory.WmsInventoryDetailDO;
  6 +
  7 +/**
  8 + * WMS 库存明细 Service 接口
  9 + *
  10 + * @author 芋道源码
  11 + */
  12 +public interface WmsInventoryDetailService {
  13 +
  14 + /**
  15 + * 获得库存明细分页
  16 + *
  17 + * @param pageReqVO 分页查询
  18 + * @return 库存明细分页
  19 + */
  20 + PageResult<WmsInventoryDetailDO> getInventoryDetailPage(WmsInventoryDetailPageReqVO pageReqVO);
  21 +
  22 +}
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryDetailServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.module.wms.service.inventory;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.module.wms.controller.admin.inventory.vo.detail.WmsInventoryDetailPageReqVO;
  5 +import cn.iocoder.yudao.module.wms.dal.dataobject.inventory.WmsInventoryDetailDO;
  6 +import cn.iocoder.yudao.module.wms.dal.mysql.inventory.WmsInventoryDetailMapper;
  7 +import jakarta.annotation.Resource;
  8 +import org.springframework.stereotype.Service;
  9 +import org.springframework.validation.annotation.Validated;
  10 +
  11 +/**
  12 + * WMS 库存明细 Service 实现类
  13 + *
  14 + * @author 芋道源码
  15 + */
  16 +@Service
  17 +@Validated
  18 +public class WmsInventoryDetailServiceImpl implements WmsInventoryDetailService {
  19 +
  20 + @Resource
  21 + private WmsInventoryDetailMapper inventoryDetailMapper;
  22 +
  23 + @Override
  24 + public PageResult<WmsInventoryDetailDO> getInventoryDetailPage(WmsInventoryDetailPageReqVO pageReqVO) {
  25 + return inventoryDetailMapper.selectPage(pageReqVO);
  26 + }
  27 +
  28 +}
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryHistoryService.java 0 → 100644
  1 +package cn.iocoder.yudao.module.wms.service.inventory;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.module.wms.controller.admin.inventory.vo.history.WmsInventoryHistoryPageReqVO;
  5 +import cn.iocoder.yudao.module.wms.dal.dataobject.inventory.WmsInventoryHistoryDO;
  6 +
  7 +/**
  8 + * WMS 库存流水 Service 接口
  9 + *
  10 + * @author 芋道源码
  11 + */
  12 +public interface WmsInventoryHistoryService {
  13 +
  14 + /**
  15 + * 获得库存流水分页
  16 + *
  17 + * @param pageReqVO 分页查询
  18 + * @return 库存流水分页
  19 + */
  20 + PageResult<WmsInventoryHistoryDO> getInventoryHistoryPage(WmsInventoryHistoryPageReqVO pageReqVO);
  21 +
  22 +}
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryHistoryServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.module.wms.service.inventory;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.module.wms.controller.admin.inventory.vo.history.WmsInventoryHistoryPageReqVO;
  5 +import cn.iocoder.yudao.module.wms.dal.dataobject.inventory.WmsInventoryHistoryDO;
  6 +import cn.iocoder.yudao.module.wms.dal.mysql.inventory.WmsInventoryHistoryMapper;
  7 +import jakarta.annotation.Resource;
  8 +import org.springframework.stereotype.Service;
  9 +import org.springframework.validation.annotation.Validated;
  10 +
  11 +/**
  12 + * WMS 库存流水 Service 实现类
  13 + *
  14 + * @author 芋道源码
  15 + */
  16 +@Service
  17 +@Validated
  18 +public class WmsInventoryHistoryServiceImpl implements WmsInventoryHistoryService {
  19 +
  20 + @Resource
  21 + private WmsInventoryHistoryMapper inventoryHistoryMapper;
  22 +
  23 + @Override
  24 + public PageResult<WmsInventoryHistoryDO> getInventoryHistoryPage(WmsInventoryHistoryPageReqVO pageReqVO) {
  25 + return inventoryHistoryMapper.selectPage(pageReqVO);
  26 + }
  27 +
  28 +}
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryService.java 0 → 100644
  1 +package cn.iocoder.yudao.module.wms.service.inventory;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.module.wms.controller.admin.inventory.vo.WmsInventoryPageReqVO;
  5 +import cn.iocoder.yudao.module.wms.dal.dataobject.inventory.WmsInventoryDO;
  6 +
  7 +/**
  8 + * WMS 库存 Service 接口
  9 + *
  10 + * @author 芋道源码
  11 + */
  12 +public interface WmsInventoryService {
  13 +
  14 + /**
  15 + * 获得库存统计分页
  16 + *
  17 + * @param pageReqVO 分页查询
  18 + * @return 库存统计分页
  19 + */
  20 + PageResult<WmsInventoryDO> getInventoryPage(WmsInventoryPageReqVO pageReqVO);
  21 +
  22 + /**
  23 + * 获得指定 SKU 的库存数量
  24 + *
  25 + * @param skuId SKU 编号
  26 + * @return 库存数量
  27 + */
  28 + long getInventoryCountBySkuId(Long skuId);
  29 +
  30 +}
yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/inventory/WmsInventoryServiceImpl.java 0 → 100644
  1 +package cn.iocoder.yudao.module.wms.service.inventory;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.module.wms.controller.admin.inventory.vo.WmsInventoryPageReqVO;
  5 +import cn.iocoder.yudao.module.wms.dal.dataobject.inventory.WmsInventoryDO;
  6 +import cn.iocoder.yudao.module.wms.dal.mysql.inventory.WmsInventoryMapper;
  7 +import jakarta.annotation.Resource;
  8 +import org.springframework.stereotype.Service;
  9 +import org.springframework.validation.annotation.Validated;
  10 +
  11 +/**
  12 + * WMS 库存 Service 实现类
  13 + *
  14 + * @author 芋道源码
  15 + */
  16 +@Service
  17 +@Validated
  18 +public class WmsInventoryServiceImpl implements WmsInventoryService {
  19 +
  20 + @Resource
  21 + private WmsInventoryMapper inventoryMapper;
  22 +
  23 + @Override
  24 + public PageResult<WmsInventoryDO> getInventoryPage(WmsInventoryPageReqVO pageReqVO) {
  25 + return inventoryMapper.selectPage(pageReqVO);
  26 + }
  27 +
  28 + @Override
  29 + public long getInventoryCountBySkuId(Long skuId) {
  30 + return inventoryMapper.selectCountBySkuId(skuId);
  31 + }
  32 +
  33 +}