diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/LocalDateTimeUtils.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/LocalDateTimeUtils.java index 287cda2..34e4d85 100644 --- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/LocalDateTimeUtils.java +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/LocalDateTimeUtils.java @@ -303,6 +303,17 @@ public class LocalDateTimeUtils { } /** + * 获取从开始日期起的日期列表 + * + * @param startDate 开始日期 + * @param days 天数 + * @return 日期列表,包含开始日期 + */ + public static List getDateList(LocalDate startDate, int days) { + return startDate.datesUntil(startDate.plusDays(days)).toList(); + } + + /** * 格式化时间范围 * * @param startTime 开始时间 diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/WmsHomeStatisticsController.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/WmsHomeStatisticsController.java index c1c29bc..e9cbbef 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/WmsHomeStatisticsController.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/WmsHomeStatisticsController.java @@ -55,8 +55,10 @@ public class WmsHomeStatisticsController { @Parameter(name = "warehouseId", description = "仓库编号", example = "1024") @PreAuthorize("@ss.hasPermission('wms:home:query')") public CommonResult getInventorySummary( - @RequestParam(value = "warehouseId", required = false) Long warehouseId) { - return success(homeStatisticsService.getInventorySummary(warehouseId)); + @RequestParam(value = "warehouseId", required = false) Long warehouseId, + @RequestParam(value = "goodsLimit", defaultValue = "5") @Min(1) @Max(20) Integer goodsLimit, + @RequestParam(value = "warehouseLimit", defaultValue = "8") @Min(1) @Max(20) Integer warehouseLimit) { + return success(homeStatisticsService.getInventorySummary(warehouseId, goodsLimit, warehouseLimit)); } } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/vo/WmsHomeInventoryItemRankRespVO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/vo/WmsHomeInventoryItemRankRespVO.java deleted file mode 100644 index 80229c1..0000000 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/vo/WmsHomeInventoryItemRankRespVO.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.iocoder.yudao.module.wms.controller.admin.home.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import java.math.BigDecimal; - -@Schema(description = "管理后台 - WMS 首页商品库存排行 Response VO") -@Data -public class WmsHomeInventoryItemRankRespVO { - - // TODO @AI:改成 id、name 会不会更好? - - @Schema(description = "商品编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - private Long itemId; - - @Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "A4 复印纸") - private String itemName; - - @Schema(description = "库存数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00") - private BigDecimal quantity; - -} diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/vo/WmsHomeInventorySummaryRespVO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/vo/WmsHomeInventorySummaryRespVO.java index 8739679..18bb5c3 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/vo/WmsHomeInventorySummaryRespVO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/vo/WmsHomeInventorySummaryRespVO.java @@ -10,15 +10,43 @@ import java.util.List; @Data public class WmsHomeInventorySummaryRespVO { - // TODO @AI:一次性的 VO ,要不合并到 WmsHomeInventorySummaryRespVO 里?一个叫 ItemRank,一个叫 WarehouseRank? - @Schema(description = "总库存数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1000.00") private BigDecimal totalQuantity; @Schema(description = "商品库存占比列表") - private List goodsShareList; + private List goodsShareList; @Schema(description = "仓库库存分布列表") - private List warehouseDistributionList; + private List warehouseDistributionList; + + @Schema(description = "管理后台 - WMS 首页商品库存排行 Response VO") + @Data + public static class ItemRank { + + @Schema(description = "商品编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "A4 复印纸") + private String name; + + @Schema(description = "库存数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00") + private BigDecimal quantity; + + } + + @Schema(description = "管理后台 - WMS 首页仓库库存排行 Response VO") + @Data + public static class WarehouseRank { + + @Schema(description = "仓库编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "仓库名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "上海仓") + private String name; + + @Schema(description = "库存数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00") + private BigDecimal quantity; + + } } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/vo/WmsHomeInventoryWarehouseRankRespVO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/vo/WmsHomeInventoryWarehouseRankRespVO.java deleted file mode 100644 index 8fb55ec..0000000 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/vo/WmsHomeInventoryWarehouseRankRespVO.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.iocoder.yudao.module.wms.controller.admin.home.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import java.math.BigDecimal; - -@Schema(description = "管理后台 - WMS 首页仓库库存排行 Response VO") -@Data -public class WmsHomeInventoryWarehouseRankRespVO { - - // TODO @AI:改成 id、name 会不会更好? - - @Schema(description = "仓库编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - private Long warehouseId; - - @Schema(description = "仓库名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "上海仓") - private String warehouseName; - - @Schema(description = "库存数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00") - private BigDecimal quantity; - -} diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/vo/WmsHomeOrderStatusRespVO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/vo/WmsHomeOrderStatusRespVO.java index cfa7e42..91b0fea 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/vo/WmsHomeOrderStatusRespVO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/vo/WmsHomeOrderStatusRespVO.java @@ -1,23 +1,15 @@ package cn.iocoder.yudao.module.wms.controller.admin.home.vo; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; import lombok.Data; -import lombok.NoArgsConstructor; @Schema(description = "管理后台 - WMS 首页单据状态统计 Response VO") @Data -@NoArgsConstructor -@AllArgsConstructor public class WmsHomeOrderStatusRespVO { @Schema(description = "状态值", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") private Integer status; - // TODO @AI:statusName 前端字段就翻译点? - @Schema(description = "状态名", requiredMode = Schema.RequiredMode.REQUIRED, example = "草稿") - private String statusName; - @Schema(description = "单据数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "12") private Long count; diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/vo/WmsHomeOrderSummaryRespVO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/vo/WmsHomeOrderSummaryRespVO.java index c062ce4..adb34de 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/vo/WmsHomeOrderSummaryRespVO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/vo/WmsHomeOrderSummaryRespVO.java @@ -9,20 +9,13 @@ import java.util.List; @Data public class WmsHomeOrderSummaryRespVO { - // TODO @AI:orderType 缩写成 type? - @Schema(description = "单据类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - private Integer orderType; - - // TODO @AI:type 改成 dict tag 去翻译?或者字典工具类? - @Schema(description = "单据类型名", requiredMode = Schema.RequiredMode.REQUIRED, example = "入库单") - private String orderTypeName; + private Integer type; @Schema(description = "单据总数", requiredMode = Schema.RequiredMode.REQUIRED, example = "12") private Long total; - // TODO @AI:statuses;状态分布; @Schema(description = "状态分布") - private List statusList; + private List statuses; } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/vo/WmsHomeOrderTrendRespVO.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/vo/WmsHomeOrderTrendRespVO.java index 97dda88..3ebb477 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/vo/WmsHomeOrderTrendRespVO.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/controller/admin/home/vo/WmsHomeOrderTrendRespVO.java @@ -3,13 +3,14 @@ package cn.iocoder.yudao.module.wms.controller.admin.home.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.time.LocalDateTime; + @Schema(description = "管理后台 - WMS 首页单据趋势 Response VO") @Data public class WmsHomeOrderTrendRespVO { - // TODO @AI:可以使用 localdatetime?前端按需翻译?无非是 time 是 00 00 00 这样。灵活性更大。 - @Schema(description = "日期", requiredMode = Schema.RequiredMode.REQUIRED, example = "2026-05-14") - private String date; + @Schema(description = "时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "1778169600000") + private LocalDateTime time; @Schema(description = "入库单数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "12") private Long receiptCount; diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/home/WmsHomeStatisticsMapper.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/home/WmsHomeStatisticsMapper.java index f1f3aa3..b752e42 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/home/WmsHomeStatisticsMapper.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/dal/mysql/home/WmsHomeStatisticsMapper.java @@ -49,7 +49,7 @@ public interface WmsHomeStatisticsMapper { * * @param warehouseId 仓库编号 * @param limit 数量限制 - * @return [{ "itemId": 1, "itemName": "A4 复印纸", "quantity": 100 }, ...] + * @return [{ "id": 1, "name": "A4 复印纸", "quantity": 100 }, ...] */ List> selectInventoryItemRank(@Param("warehouseId") Long warehouseId, @Param("limit") Integer limit); @@ -59,7 +59,7 @@ public interface WmsHomeStatisticsMapper { * * @param warehouseId 仓库编号 * @param limit 数量限制 - * @return [{ "warehouseId": 1, "warehouseName": "上海仓", "quantity": 100 }, ...] + * @return [{ "id": 1, "name": "上海仓", "quantity": 100 }, ...] */ List> selectInventoryWarehouseRank(@Param("warehouseId") Long warehouseId, @Param("limit") Integer limit); diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/home/WmsHomeStatisticsService.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/home/WmsHomeStatisticsService.java index 7a3abbc..75015ef 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/home/WmsHomeStatisticsService.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/home/WmsHomeStatisticsService.java @@ -22,10 +22,10 @@ public interface WmsHomeStatisticsService { List getOrderSummary(Long warehouseId); /** - * 获得单据趋势 + * 获得单据趋势,按日期统计入库、出库、移库、盘库单据数量。 * - * @param days 天数 - * @param warehouseId 仓库编号 + * @param days 最近天数,包含今天 + * @param warehouseId 仓库编号,为空时统计全部仓库 * @return 单据趋势 */ List getOrderTrend(Integer days, Long warehouseId); @@ -34,8 +34,10 @@ public interface WmsHomeStatisticsService { * 获得库存汇总统计 * * @param warehouseId 仓库编号 + * @param goodsLimit 商品排行数量 + * @param warehouseLimit 仓库排行数量 * @return 库存汇总统计 */ - WmsHomeInventorySummaryRespVO getInventorySummary(Long warehouseId); + WmsHomeInventorySummaryRespVO getInventorySummary(Long warehouseId, Integer goodsLimit, Integer warehouseLimit); } diff --git a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/home/WmsHomeStatisticsServiceImpl.java b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/home/WmsHomeStatisticsServiceImpl.java index 4be90d7..3557824 100644 --- a/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/home/WmsHomeStatisticsServiceImpl.java +++ b/yudao-module-wms/src/main/java/cn/iocoder/yudao/module/wms/service/home/WmsHomeStatisticsServiceImpl.java @@ -1,9 +1,9 @@ package cn.iocoder.yudao.module.wms.service.home; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; -import cn.iocoder.yudao.module.wms.controller.admin.home.vo.WmsHomeInventoryItemRankRespVO; import cn.iocoder.yudao.module.wms.controller.admin.home.vo.WmsHomeInventorySummaryRespVO; -import cn.iocoder.yudao.module.wms.controller.admin.home.vo.WmsHomeInventoryWarehouseRankRespVO; import cn.iocoder.yudao.module.wms.controller.admin.home.vo.WmsHomeOrderStatusRespVO; import cn.iocoder.yudao.module.wms.controller.admin.home.vo.WmsHomeOrderSummaryRespVO; import cn.iocoder.yudao.module.wms.controller.admin.home.vo.WmsHomeOrderTrendRespVO; @@ -16,14 +16,17 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.getSumValue; +import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.getBigDecimal; +import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.getDateList; + /** * WMS 首页统计 Service 实现类 * @@ -32,137 +35,83 @@ import java.util.Map; @Service public class WmsHomeStatisticsServiceImpl implements WmsHomeStatisticsService { - // TODO @AI:8、5、交给前端传递; - private static final int GOODS_SHARE_LIMIT = 5; - private static final int WAREHOUSE_DISTRIBUTION_LIMIT = 8; - @Resource private WmsHomeStatisticsMapper homeStatisticsMapper; @Override public List getOrderSummary(Long warehouseId) { List> stats = homeStatisticsMapper.selectOrderCountGroupByTypeAndStatus(warehouseId); - // TODO @AI:convertList 链式调用。 - List result = new ArrayList<>(); - for (WmsOrderTypeEnum orderTypeEnum : WmsOrderTypeEnum.values()) { - WmsHomeOrderSummaryRespVO vo = new WmsHomeOrderSummaryRespVO() - .setOrderType(orderTypeEnum.getType()).setOrderTypeName(orderTypeEnum.getName()); - // TODO @AI:collutils sum 是不是可以? - long total = 0L; - List statusList = new ArrayList<>(); - for (WmsOrderStatusEnum statusEnum : WmsOrderStatusEnum.values()) { - long count = getOrderCount(stats, orderTypeEnum.getType(), statusEnum.getStatus()); - total += count; - statusList.add(new WmsHomeOrderStatusRespVO(statusEnum.getStatus(), statusEnum.getName(), count)); - } - vo.setTotal(total).setStatusList(statusList); - result.add(vo); - } - return result; + return convertList(WmsOrderTypeEnum.values(), orderTypeEnum -> { + List statuses = convertList(WmsOrderStatusEnum.values(), statusEnum -> + new WmsHomeOrderStatusRespVO().setStatus(statusEnum.getStatus()) + .setCount(getOrderCount(stats, orderTypeEnum.getType(), statusEnum.getStatus()))); + Long total = getSumValue(statuses, WmsHomeOrderStatusRespVO::getCount, Long::sum, 0L); + return new WmsHomeOrderSummaryRespVO().setType(orderTypeEnum.getType()).setTotal(total).setStatuses(statuses); + }); } @Override public List getOrderTrend(Integer days, Long warehouseId) { - // TODO @AI:同上? + // 统计区间为 [今天 - days + 1, 明天),保证最近 days 天包含今天。 LocalDate endDate = LocalDate.now().plusDays(1); LocalDate startDate = endDate.minusDays(days); LocalDateTime beginTime = startDate.atStartOfDay(); LocalDateTime endTime = endDate.atStartOfDay(); - + // 查询每天的单据数量 List> dbData = homeStatisticsMapper.selectDailyOrderTrend(beginTime, endTime, warehouseId); Map> dateMap = new LinkedHashMap<>(); for (Map row : dbData) { - String date = (String) row.get("date"); - Integer orderType = getInteger(row, "orderType"); - Long count = getLong(row, "count"); + String date = MapUtil.getStr(row, "date"); + Integer orderType = MapUtil.getInt(row, "orderType"); + Long count = MapUtil.getLong(row, "count", 0L); dateMap.computeIfAbsent(date, key -> new HashMap<>()).put(orderType, count); } - // TODO @AI:链式调用; - DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - List result = new ArrayList<>(); - for (LocalDate d = startDate; d.isBefore(endDate); d = d.plusDays(1)) { - String dateStr = d.format(fmt); + // 构造结果,保证每天都有数据 + return convertList(getDateList(startDate, days), d -> { + String dateStr = DatePattern.NORM_DATE_FORMATTER.format(d); Map row = dateMap.getOrDefault(dateStr, Collections.emptyMap()); - WmsHomeOrderTrendRespVO vo = new WmsHomeOrderTrendRespVO(); - vo.setDate(dateStr); - vo.setReceiptCount(row.getOrDefault(WmsOrderTypeEnum.RECEIPT.getType(), 0L)); - vo.setShipmentCount(row.getOrDefault(WmsOrderTypeEnum.SHIPMENT.getType(), 0L)); - vo.setMovementCount(row.getOrDefault(WmsOrderTypeEnum.MOVEMENT.getType(), 0L)); - vo.setCheckCount(row.getOrDefault(WmsOrderTypeEnum.CHECK.getType(), 0L)); - result.add(vo); - } - return result; + return new WmsHomeOrderTrendRespVO().setTime(d.atStartOfDay()) + .setReceiptCount(row.getOrDefault(WmsOrderTypeEnum.RECEIPT.getType(), 0L)) + .setShipmentCount(row.getOrDefault(WmsOrderTypeEnum.SHIPMENT.getType(), 0L)) + .setMovementCount(row.getOrDefault(WmsOrderTypeEnum.MOVEMENT.getType(), 0L)) + .setCheckCount(row.getOrDefault(WmsOrderTypeEnum.CHECK.getType(), 0L)); + }); } @Override - public WmsHomeInventorySummaryRespVO getInventorySummary(Long warehouseId) { - // TODO @AI:要不都先查询;然后 set 设置值; - return new WmsHomeInventorySummaryRespVO() - .setTotalQuantity(getDecimal(homeStatisticsMapper.selectInventoryTotalQuantity(warehouseId))) - .setGoodsShareList(buildInventoryItemRankList(homeStatisticsMapper.selectInventoryItemRank(warehouseId, GOODS_SHARE_LIMIT))) - .setWarehouseDistributionList(buildInventoryWarehouseRankList(homeStatisticsMapper.selectInventoryWarehouseRank(warehouseId, WAREHOUSE_DISTRIBUTION_LIMIT))); + public WmsHomeInventorySummaryRespVO getInventorySummary(Long warehouseId, Integer goodsLimit, Integer warehouseLimit) { + BigDecimal totalQuantity = ObjectUtil.defaultIfNull(homeStatisticsMapper.selectInventoryTotalQuantity(warehouseId), BigDecimal.ZERO); + List> itemRows = homeStatisticsMapper.selectInventoryItemRank(warehouseId, goodsLimit); + List> warehouseRows = homeStatisticsMapper.selectInventoryWarehouseRank(warehouseId, warehouseLimit); + return new WmsHomeInventorySummaryRespVO().setTotalQuantity(totalQuantity) + .setGoodsShareList(buildInventoryItemRankList(itemRows)) + .setWarehouseDistributionList(buildInventoryWarehouseRankList(warehouseRows)); } - // TODO @AI:这个 ===== 太短了,加长! - // ========== 工具方法 ========== + // ==================== 工具方法 ==================== private long getOrderCount(List> stats, Integer orderType, Integer status) { for (Map stat : stats) { - if (ObjectUtil.equal(getInteger(stat, "orderType"), orderType) - && ObjectUtil.equal(getInteger(stat, "status"), status)) { - return getLong(stat, "count"); + if (ObjectUtil.equal(MapUtil.getInt(stat, "orderType"), orderType) + && ObjectUtil.equal(MapUtil.getInt(stat, "status"), status)) { + return MapUtil.getLong(stat, "count", 0L); } } return 0L; } - // TODO @AI:convertList;然后链式调用; - private List buildInventoryItemRankList(List> rows) { - List result = new ArrayList<>(rows.size()); - for (Map row : rows) { - WmsHomeInventoryItemRankRespVO vo = new WmsHomeInventoryItemRankRespVO(); - vo.setItemId(getLong(row, "itemId")); - vo.setItemName((String) row.get("itemName")); - vo.setQuantity(getDecimal(row.get("quantity"))); - result.add(vo); - } - return result; - } - - // TODO @AI:convertList;然后链式调用; - private List buildInventoryWarehouseRankList(List> rows) { - List result = new ArrayList<>(rows.size()); - for (Map row : rows) { - WmsHomeInventoryWarehouseRankRespVO vo = new WmsHomeInventoryWarehouseRankRespVO(); - vo.setWarehouseId(getLong(row, "warehouseId")); - vo.setWarehouseName((String) row.get("warehouseName")); - vo.setQuantity(getDecimal(row.get("quantity"))); - result.add(vo); - } - return result; - } - - // TODO @AI:maputil 直接使用 - private Integer getInteger(Map map, String key) { - Object value = map.get(key); - return value == null ? null : ((Number) value).intValue(); + private List buildInventoryItemRankList(List> rows) { + return convertList(rows, row -> new WmsHomeInventorySummaryRespVO.ItemRank() + .setId(ObjectUtil.defaultIfNull(MapUtil.getLong(row, "id"), MapUtil.getLong(row, "itemId"))) + .setName(ObjectUtil.defaultIfNull(MapUtil.getStr(row, "name"), MapUtil.getStr(row, "itemName"))) + .setQuantity(getBigDecimal(row, "quantity", BigDecimal.ZERO))); } - // TODO @AI:maputil 直接使用 - private Long getLong(Map map, String key) { - Object value = map.get(key); - return value == null ? 0L : ((Number) value).longValue(); - } - - // TODO @AI:maputil 直接使用 - private BigDecimal getDecimal(Object value) { - if (value == null) { - return BigDecimal.ZERO; - } - if (value instanceof BigDecimal) { - return (BigDecimal) value; - } - return new BigDecimal(value.toString()); + private List buildInventoryWarehouseRankList(List> rows) { + return convertList(rows, row -> new WmsHomeInventorySummaryRespVO.WarehouseRank() + .setId(ObjectUtil.defaultIfNull(MapUtil.getLong(row, "id"), MapUtil.getLong(row, "warehouseId"))) + .setName(ObjectUtil.defaultIfNull(MapUtil.getStr(row, "name"), MapUtil.getStr(row, "warehouseName"))) + .setQuantity(getBigDecimal(row, "quantity", BigDecimal.ZERO))); } } diff --git a/yudao-module-wms/src/main/resources/mapper/home/WmsHomeStatisticsMapper.xml b/yudao-module-wms/src/main/resources/mapper/home/WmsHomeStatisticsMapper.xml index aa8c928..38c7bdf 100644 --- a/yudao-module-wms/src/main/resources/mapper/home/WmsHomeStatisticsMapper.xml +++ b/yudao-module-wms/src/main/resources/mapper/home/WmsHomeStatisticsMapper.xml @@ -118,8 +118,8 @@ - SELECT warehouse.id AS warehouseId, - warehouse.name AS warehouseName, + SELECT warehouse.id AS id, + warehouse.name AS name, IFNULL(SUM(inventory.quantity), 0) AS quantity FROM wms_inventory inventory INNER JOIN wms_warehouse warehouse ON warehouse.id = inventory.warehouse_id AND warehouse.deleted = 0 diff --git a/yudao-server/src/main/resources/application-local.yaml b/yudao-server/src/main/resources/application-local.yaml index 0d60c4b..77d916b 100644 --- a/yudao-server/src/main/resources/application-local.yaml +++ b/yudao-server/src/main/resources/application-local.yaml @@ -1,5 +1,5 @@ server: - port: 48080 + port: 48088 --- #################### 数据库相关配置 #################### spring: