From 3af78d5d7bafa1ff3238d0af38e09c7dd8696e58 Mon Sep 17 00:00:00 2001 From: rcx <3084692334@qq.com> Date: Wed, 2 Sep 2026 15:25:51 +0800 Subject: [PATCH] =?UTF-8?q?feat(wms,oms)=EF=BC=9A=E5=87=BA=E5=BA=93?= =?UTF-8?q?=E6=8E=92=E5=90=8D=E7=BB=9F=E8=AE=A1=E6=94=B9=E9=80=A0=E4=B8=BA?= =?UTF-8?q?=E4=BB=93=E5=8D=95=C3=97=E8=B4=A7=E5=93=81=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E5=88=97=E8=A1=A8=EF=BC=8C=E6=8C=89=E5=87=BA=E5=BA=93=E6=95=B0?= =?UTF-8?q?=E9=87=8F=E9=99=8D=E5=BA=8F=E6=8E=92=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 字段:种类/仓单编号/入库单号/客户编号/收货人/货名/线路/件数/毛重(吨)/体积(CBM)/退保总额(占位null,数据来源待确认)/出仓日期 - 商品/线路各一套接口,路径名不变;商品接口忽略线路筛选参数,线路接口忽略商品筛选参数;含合计行(件数/毛重吨/体积/仓单数)与Excel导出 - 统计口径不变:出库单创建时间区间+已出库状态(9,12,13)+明细level=1主行;排序按出库数量(销售量)降序,件数/出仓日期/单号次之 - 数据源:WMS查本库出库表;OMS跨库查NGWL_TEST_WMS同名表(OMS库出库单状态不流转,跨库与WMS端数字一致) - 删除原按商品/线路聚合的排名接口(销售量/交易数/金额字段) --- .../facade/IExecutionOutboundRankService.java | 25 +--- .../mapper/ExecutionOutboundRankMapper.java | 25 +--- .../ExecutionOutboundRankImpl.java | 25 +--- .../po/ExecutionOutboundDetailRankPO.java | 85 +++++++++++++ .../ExecutionOutboundDetailRankTotalPO.java | 36 ++++++ .../po/ExecutionOutboundLineRankPO.java | 45 ------- .../po/ExecutionOutboundMaterialRankPO.java | 52 -------- .../po/ExecutionOutboundRankTotalPO.java | 32 ----- .../todo/ExecutionOutboundRankDO.java | 10 +- .../todo/ExecutionOutboundRankDTO.java | 22 +++- ...ecutionOutboundRankApplicationService.java | 58 +++------ .../ExecutionOutboundRankDomainService.java | 33 ++--- .../ExecutionOutboundRankApi.java | 62 +++++---- .../ExecutionOutboundRankMapper.xml | 101 +++++++-------- .../OutboundRankApplicationService.java | 58 +++------ .../facade/IOutboundRankService.java | 25 +--- .../repository/mapper/OutboundRankMapper.java | 25 +--- .../persistence/OutboundRankImpl.java | 25 +--- .../repository/po/OutboundDetailRankPO.java | 85 +++++++++++++ .../po/OutboundDetailRankTotalPO.java | 36 ++++++ .../repository/po/OutboundLineRankPO.java | 45 ------- .../repository/po/OutboundMaterialRankPO.java | 52 -------- .../repository/po/OutboundRankTotalPO.java | 32 ----- .../repository/todo/OutboundRankDO.java | 10 +- .../service/OutboundRankDomainService.java | 33 ++--- .../dto/outboundRank/OutboundRankDTO.java | 23 +++- .../outboundRank/OutboundRankApi.java | 58 +++++---- .../outboundRank/OutboundRankMapper.xml | 120 ++++++++---------- 28 files changed, 554 insertions(+), 684 deletions(-) create mode 100644 mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/po/ExecutionOutboundDetailRankPO.java create mode 100644 mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/po/ExecutionOutboundDetailRankTotalPO.java delete mode 100644 mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/po/ExecutionOutboundLineRankPO.java delete mode 100644 mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/po/ExecutionOutboundMaterialRankPO.java delete mode 100644 mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/po/ExecutionOutboundRankTotalPO.java create mode 100644 mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundDetailRankPO.java create mode 100644 mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundDetailRankTotalPO.java delete mode 100644 mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundLineRankPO.java delete mode 100644 mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundMaterialRankPO.java delete mode 100644 mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundRankTotalPO.java diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/facade/IExecutionOutboundRankService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/facade/IExecutionOutboundRankService.java index b7a1a0830..477fc1e99 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/facade/IExecutionOutboundRankService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/facade/IExecutionOutboundRankService.java @@ -1,14 +1,13 @@ package com.mhd.oms.domain.outboundRank.repository.facade; -import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundLineRankPO; -import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundMaterialRankPO; -import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundRankTotalPO; +import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundDetailRankPO; +import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundDetailRankTotalPO; import com.mhd.oms.domain.outboundRank.repository.todo.ExecutionOutboundRankDO; import java.util.List; /** - * 出库排名统计Service接口 + * 出库排名统计(明细)Service接口 * * @author rcx * @date 2026-08-31 @@ -16,22 +15,12 @@ import java.util.List; public interface IExecutionOutboundRankService { /** - * 商品出库排名列表 + * 出库明细列表 */ - List queryMaterialRankList(ExecutionOutboundRankDO executionOutboundRankDO); + List queryDetailList(ExecutionOutboundRankDO executionOutboundRankDO); /** - * 线路出库排名列表 + * 出库明细合计(不分页) */ - List queryLineRankList(ExecutionOutboundRankDO executionOutboundRankDO); - - /** - * 商品出库排名合计(不分页) - */ - ExecutionOutboundRankTotalPO queryMaterialRankTotal(ExecutionOutboundRankDO executionOutboundRankDO); - - /** - * 线路出库排名合计(不分页) - */ - ExecutionOutboundRankTotalPO queryLineRankTotal(ExecutionOutboundRankDO executionOutboundRankDO); + ExecutionOutboundDetailRankTotalPO queryDetailTotal(ExecutionOutboundRankDO executionOutboundRankDO); } diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/mapper/ExecutionOutboundRankMapper.java b/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/mapper/ExecutionOutboundRankMapper.java index b6722a546..3f88c7823 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/mapper/ExecutionOutboundRankMapper.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/mapper/ExecutionOutboundRankMapper.java @@ -1,14 +1,13 @@ package com.mhd.oms.domain.outboundRank.repository.mapper; -import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundLineRankPO; -import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundMaterialRankPO; -import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundRankTotalPO; +import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundDetailRankPO; +import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundDetailRankTotalPO; import com.mhd.oms.domain.outboundRank.repository.todo.ExecutionOutboundRankDO; import java.util.List; /** - * 出库排名统计Mapper接口 + * 出库排名统计(明细)Mapper接口 * * @author rcx * @date 2026-08-31 @@ -16,22 +15,12 @@ import java.util.List; public interface ExecutionOutboundRankMapper { /** - * 商品出库排名列表(按销售量倒序) + * 出库明细列表(一行=仓单×货品,按件数倒序) */ - List queryMaterialRankList(ExecutionOutboundRankDO executionOutboundRankDO); + List queryDetailList(ExecutionOutboundRankDO executionOutboundRankDO); /** - * 线路出库排名列表(按销售量倒序) + * 出库明细合计(不分页,当前筛选条件全量合计) */ - List queryLineRankList(ExecutionOutboundRankDO executionOutboundRankDO); - - /** - * 商品出库排名合计(不分页,当前筛选条件全量合计) - */ - ExecutionOutboundRankTotalPO queryMaterialRankTotal(ExecutionOutboundRankDO executionOutboundRankDO); - - /** - * 线路出库排名合计(不分页,当前筛选条件全量合计) - */ - ExecutionOutboundRankTotalPO queryLineRankTotal(ExecutionOutboundRankDO executionOutboundRankDO); + ExecutionOutboundDetailRankTotalPO queryDetailTotal(ExecutionOutboundRankDO executionOutboundRankDO); } diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/persistence/ExecutionOutboundRankImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/persistence/ExecutionOutboundRankImpl.java index 3c06f90ab..76e2abcd4 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/persistence/ExecutionOutboundRankImpl.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/persistence/ExecutionOutboundRankImpl.java @@ -2,9 +2,8 @@ package com.mhd.oms.domain.outboundRank.repository.persistence; import com.mhd.oms.domain.outboundRank.repository.facade.IExecutionOutboundRankService; import com.mhd.oms.domain.outboundRank.repository.mapper.ExecutionOutboundRankMapper; -import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundLineRankPO; -import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundMaterialRankPO; -import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundRankTotalPO; +import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundDetailRankPO; +import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundDetailRankTotalPO; import com.mhd.oms.domain.outboundRank.repository.todo.ExecutionOutboundRankDO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -12,7 +11,7 @@ import org.springframework.stereotype.Service; import java.util.List; /** - * 出库排名统计Service业务层处理 + * 出库排名统计(明细)Service业务层处理 * * @author rcx * @date 2026-08-31 @@ -24,22 +23,12 @@ public class ExecutionOutboundRankImpl implements IExecutionOutboundRankService private ExecutionOutboundRankMapper executionOutboundRankMapper; @Override - public List queryMaterialRankList(ExecutionOutboundRankDO executionOutboundRankDO) { - return executionOutboundRankMapper.queryMaterialRankList(executionOutboundRankDO); + public List queryDetailList(ExecutionOutboundRankDO executionOutboundRankDO) { + return executionOutboundRankMapper.queryDetailList(executionOutboundRankDO); } @Override - public List queryLineRankList(ExecutionOutboundRankDO executionOutboundRankDO) { - return executionOutboundRankMapper.queryLineRankList(executionOutboundRankDO); - } - - @Override - public ExecutionOutboundRankTotalPO queryMaterialRankTotal(ExecutionOutboundRankDO executionOutboundRankDO) { - return executionOutboundRankMapper.queryMaterialRankTotal(executionOutboundRankDO); - } - - @Override - public ExecutionOutboundRankTotalPO queryLineRankTotal(ExecutionOutboundRankDO executionOutboundRankDO) { - return executionOutboundRankMapper.queryLineRankTotal(executionOutboundRankDO); + public ExecutionOutboundDetailRankTotalPO queryDetailTotal(ExecutionOutboundRankDO executionOutboundRankDO) { + return executionOutboundRankMapper.queryDetailTotal(executionOutboundRankDO); } } diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/po/ExecutionOutboundDetailRankPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/po/ExecutionOutboundDetailRankPO.java new file mode 100644 index 000000000..f894c05d8 --- /dev/null +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/po/ExecutionOutboundDetailRankPO.java @@ -0,0 +1,85 @@ +package com.mhd.oms.domain.outboundRank.repository.po; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.mhd.common.core.annotation.Excel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 出库排名统计(明细)PO(一行 = 仓单×货品,件数/毛重/体积按行汇总) + * + *

字段口径:种类=出库单据类型;仓单编号=出库单号;收货人=出库单 TO 栏(为空取联系人); + * 毛重(吨)=明细总毛重KG/1000;出仓日期=出仓日期(为空依次兜底完成时间/创建时间); + * 退保总额为占位字段,后端暂无对应数据来源,恒为 null(候选:货品档案保额 insure_amount,确认后可补)

+ * + * @author rcx + * @date 2026-08-31 + */ +@Data +@ApiModel(value = "出库排名统计明细对象", description = "出库排名统计明细响应对象") +public class ExecutionOutboundDetailRankPO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("种类(出库单据类型)") + @Excel(name = "种类") + private String orderTypeName; + + @ApiModelProperty("仓单编号(出库单号)") + @Excel(name = "仓单编号") + private String outOrderNumber; + + @ApiModelProperty("入库单号") + @Excel(name = "入库单号") + private String inOrderNumber; + + @ApiModelProperty("客户编号") + @Excel(name = "客户编号") + private String customerCode; + + @ApiModelProperty("收货人(出库单 TO 栏,为空取联系人)") + @Excel(name = "收货人") + private String receiver; + + @ApiModelProperty("商品货号(辅助字段,不导出)") + private String materialCode; + + @ApiModelProperty("货名") + @Excel(name = "货名") + private String materialName; + + @ApiModelProperty("线路编码(辅助字段,不导出)") + private String lineCode; + + @ApiModelProperty("线路") + @Excel(name = "线路") + private String lineName; + + @ApiModelProperty("件数") + @Excel(name = "件数") + private BigDecimal pieceCount; + + @ApiModelProperty("毛重(吨)") + @Excel(name = "毛重(吨)") + private BigDecimal grossWeightTon; + + @ApiModelProperty("体积(CBM)") + @Excel(name = "体积(CBM)") + private BigDecimal totalVolume; + + @ApiModelProperty("退保总额(占位字段,后端暂无数据来源,恒为 null)") + @Excel(name = "退保总额") + private BigDecimal depositRefundAmount; + + @ApiModelProperty("出仓日期(出仓日期为空时依次兜底完成时间/创建时间)") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @Excel(name = "出仓日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date outboundDate; +} diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/po/ExecutionOutboundDetailRankTotalPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/po/ExecutionOutboundDetailRankTotalPO.java new file mode 100644 index 000000000..355295a34 --- /dev/null +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/po/ExecutionOutboundDetailRankTotalPO.java @@ -0,0 +1,36 @@ +package com.mhd.oms.domain.outboundRank.repository.po; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 出库排名统计(明细)合计PO + * + *

当前筛选条件下不分页的全量合计,随分页列表一起返回 + * (totalPieceCount/totalGrossWeightTon/totalVolume/totalOrderCount)

+ * + * @author rcx + * @date 2026-08-31 + */ +@Data +@ApiModel(value = "出库排名统计明细合计对象", description = "出库排名统计明细合计响应对象") +public class ExecutionOutboundDetailRankTotalPO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("件数合计") + private BigDecimal totalPieceCount; + + @ApiModelProperty("毛重(吨)合计") + private BigDecimal totalGrossWeightTon; + + @ApiModelProperty("体积(CBM)合计") + private BigDecimal totalVolume; + + @ApiModelProperty("仓单数合计(去重出库单数)") + private Long totalOrderCount; +} diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/po/ExecutionOutboundLineRankPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/po/ExecutionOutboundLineRankPO.java deleted file mode 100644 index 974944f90..000000000 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/po/ExecutionOutboundLineRankPO.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.mhd.oms.domain.outboundRank.repository.po; - -import com.mhd.common.core.annotation.Excel; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; -import java.math.BigDecimal; - -/** - * 线路出库排名PO - * - *

按日期区间对出库单聚合:销售量=SUM(出库数量),交易数=COUNT(DISTINCT 出库单号),金额=SUM(明细总价); - * 仅统计带线路的出库单(line_code 为 2026-08-20 新增冗余字段,历史单为空)

- * - * @author rcx - * @date 2026-08-31 - */ -@Data -@ApiModel(value = "线路出库排名对象", description = "线路出库排名响应对象") -public class ExecutionOutboundLineRankPO implements Serializable { - - private static final long serialVersionUID = 1L; - - @ApiModelProperty("线路编码") - @Excel(name = "线路编码") - private String lineCode; - - @ApiModelProperty("线路名称") - @Excel(name = "线路名称") - private String lineName; - - @ApiModelProperty("销售量(出库数量合计)") - @Excel(name = "销售量") - private BigDecimal salesQuantity; - - @ApiModelProperty("交易数(出库单据数)") - @Excel(name = "交易数") - private Long tradeCount; - - @ApiModelProperty("金额") - @Excel(name = "金额") - private BigDecimal amount; -} diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/po/ExecutionOutboundMaterialRankPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/po/ExecutionOutboundMaterialRankPO.java deleted file mode 100644 index c32046d9f..000000000 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/po/ExecutionOutboundMaterialRankPO.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.mhd.oms.domain.outboundRank.repository.po; - -import com.mhd.common.core.annotation.Excel; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; -import java.math.BigDecimal; - -/** - * 商品出库排名PO - * - *

按日期区间对出库明细聚合:销售量=SUM(出库数量),交易数=COUNT(DISTINCT 出库单号),金额=SUM(明细总价)

- * - * @author rcx - * @date 2026-08-31 - */ -@Data -@ApiModel(value = "商品出库排名对象", description = "商品出库排名响应对象") -public class ExecutionOutboundMaterialRankPO implements Serializable { - - private static final long serialVersionUID = 1L; - - @ApiModelProperty("商品货号") - @Excel(name = "商品货号") - private String materialCode; - - @ApiModelProperty("商品名称") - @Excel(name = "商品名称") - private String materialName; - - @ApiModelProperty("规格") - @Excel(name = "规格") - private String specificationModel; - - @ApiModelProperty("单位") - @Excel(name = "单位") - private String unitName; - - @ApiModelProperty("销售量(出库数量合计)") - @Excel(name = "销售量") - private BigDecimal salesQuantity; - - @ApiModelProperty("交易数(出库单据数)") - @Excel(name = "交易数") - private Long tradeCount; - - @ApiModelProperty("金额") - @Excel(name = "金额") - private BigDecimal amount; -} diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/po/ExecutionOutboundRankTotalPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/po/ExecutionOutboundRankTotalPO.java deleted file mode 100644 index 7622c3593..000000000 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/po/ExecutionOutboundRankTotalPO.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.mhd.oms.domain.outboundRank.repository.po; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; -import java.math.BigDecimal; - -/** - * 出库排名合计PO - * - *

当前筛选条件下不分页的全量合计,随分页列表一起返回(totalSalesQuantity/totalTradeCount/totalAmount)

- * - * @author rcx - * @date 2026-08-31 - */ -@Data -@ApiModel(value = "出库排名合计对象", description = "出库排名合计响应对象") -public class ExecutionOutboundRankTotalPO implements Serializable { - - private static final long serialVersionUID = 1L; - - @ApiModelProperty("销售量合计") - private BigDecimal totalSalesQuantity; - - @ApiModelProperty("交易数合计(去重出库单数)") - private Long totalTradeCount; - - @ApiModelProperty("金额合计") - private BigDecimal totalAmount; -} diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/todo/ExecutionOutboundRankDO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/todo/ExecutionOutboundRankDO.java index 83e8064ce..e825f4059 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/todo/ExecutionOutboundRankDO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/todo/ExecutionOutboundRankDO.java @@ -6,7 +6,7 @@ import lombok.Data; import java.io.Serializable; /** - * 出库排名统计查询DO + * 出库排名统计(明细)查询DO * *

topOrganizationId 由服务端按登录用户注入,前端不传

* @@ -24,10 +24,16 @@ public class ExecutionOutboundRankDO implements Serializable { @ApiModelProperty("出库日期-结束 yyyy-MM-dd(必填)") private String createTimeEnd; + @ApiModelProperty("仓单编号/出库单号(模糊)") + private String outOrderNumber; + + @ApiModelProperty("入库单号(模糊)") + private String inOrderNumber; + @ApiModelProperty("商品货号(模糊)") private String materialCode; - @ApiModelProperty("商品名称(模糊)") + @ApiModelProperty("货名/商品名称(模糊)") private String materialName; @ApiModelProperty("线路编码(模糊)") diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/todo/ExecutionOutboundRankDTO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/todo/ExecutionOutboundRankDTO.java index 0637173b7..f150e1335 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/todo/ExecutionOutboundRankDTO.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/todo/ExecutionOutboundRankDTO.java @@ -6,27 +6,35 @@ import lombok.Data; import java.io.Serializable; /** - * 出库排名统计入参DTO + * 出库排名统计(明细)入参DTO * - *

按日期区间统计商品/线路出库量排名。OMS 库出库单状态不流转(无"已出库"数据), - * 数据源跨库取 WMS 库出库表(NGWL_TEST_WMS.stock_out_order / out_material_detail),与 WMS 端 /outboundRankApi 同口径

+ *

按日期区间筛选出库明细列表,一行 = 仓单×货品(件数/毛重/体积按行汇总,件数降序)。 + * OMS 库出库单状态不流转(无"已出库"数据),数据源跨库取 WMS 库出库表,与 WMS 端 /outboundRankApi 同口径

* * @author rcx * @date 2026-08-31 */ @Data -public class ExecutionOutboundRankDTO { +public class ExecutionOutboundRankDTO implements Serializable { - @ApiModelProperty("出库日期-开始 yyyy-MM-dd(必填,按出库单创建时间统计)") + private static final long serialVersionUID = 1L; + + @ApiModelProperty("出库日期-开始 yyyy-MM-dd(必填,按出库单创建时间筛选)") private String createTimeStart; - @ApiModelProperty("出库日期-结束 yyyy-MM-dd(必填,按出库单创建时间统计)") + @ApiModelProperty("出库日期-结束 yyyy-MM-dd(必填,按出库单创建时间筛选)") private String createTimeEnd; + @ApiModelProperty("仓单编号/出库单号(模糊)") + private String outOrderNumber; + + @ApiModelProperty("入库单号(模糊)") + private String inOrderNumber; + @ApiModelProperty("商品货号(模糊)") private String materialCode; - @ApiModelProperty("商品名称(模糊)") + @ApiModelProperty("货名/商品名称(模糊)") private String materialName; @ApiModelProperty("线路编码(模糊)") diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/service/ExecutionOutboundRankApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/service/ExecutionOutboundRankApplicationService.java index 158f2b8c2..2d68567c0 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/service/ExecutionOutboundRankApplicationService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/service/ExecutionOutboundRankApplicationService.java @@ -4,9 +4,8 @@ import com.mhd.common.core.exception.ServiceException; import com.mhd.common.core.utils.StringUtils; import com.mhd.common.security.utils.SecurityUtils; import com.mhd.system.api.model.LoginUser; -import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundLineRankPO; -import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundMaterialRankPO; -import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundRankTotalPO; +import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundDetailRankPO; +import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundDetailRankTotalPO; import com.mhd.oms.domain.outboundRank.repository.todo.ExecutionOutboundRankDO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -15,9 +14,9 @@ import org.springframework.stereotype.Service; import java.util.List; /** - * 出库排名统计应用服务 + * 出库排名统计(明细)应用服务 * - *

负责登录用户组织隔离注入、日期区间校验,统计逻辑在 ExecutionOutboundRankDomainService → ExecutionOutboundRankMapper.xml(跨库取 WMS 出库数据)

+ *

负责登录用户组织隔离注入、日期区间校验,查询逻辑在 ExecutionOutboundRankDomainService → ExecutionOutboundRankMapper.xml(跨库取 WMS 出库数据)

* * @author rcx * @date 2026-08-31 @@ -30,49 +29,26 @@ public class ExecutionOutboundRankApplicationService { private ExecutionOutboundRankDomainService executionOutboundRankDomainService; /** - * 分页查询商品出库排名列表 + * 分页查询出库明细列表 */ - public List queryMaterialRankList(ExecutionOutboundRankDO executionOutboundRankDO) { + public List queryDetailList(ExecutionOutboundRankDO executionOutboundRankDO) { fillLoginContext(executionOutboundRankDO); - return executionOutboundRankDomainService.queryMaterialRankList(executionOutboundRankDO); + return executionOutboundRankDomainService.queryDetailList(executionOutboundRankDO); } /** - * 分页查询线路出库排名列表 + * 出库明细合计(当前筛选条件全量,不分页) */ - public List queryLineRankList(ExecutionOutboundRankDO executionOutboundRankDO) { + public ExecutionOutboundDetailRankTotalPO queryDetailTotal(ExecutionOutboundRankDO executionOutboundRankDO) { + return executionOutboundRankDomainService.queryDetailTotal(executionOutboundRankDO); + } + + /** + * 导出出库明细(不分页全量) + */ + public List exportDetailList(ExecutionOutboundRankDO executionOutboundRankDO) { fillLoginContext(executionOutboundRankDO); - return executionOutboundRankDomainService.queryLineRankList(executionOutboundRankDO); - } - - /** - * 商品出库排名合计(当前筛选条件全量,不分页) - */ - public ExecutionOutboundRankTotalPO queryMaterialRankTotal(ExecutionOutboundRankDO executionOutboundRankDO) { - return executionOutboundRankDomainService.queryMaterialRankTotal(executionOutboundRankDO); - } - - /** - * 线路出库排名合计(当前筛选条件全量,不分页) - */ - public ExecutionOutboundRankTotalPO queryLineRankTotal(ExecutionOutboundRankDO executionOutboundRankDO) { - return executionOutboundRankDomainService.queryLineRankTotal(executionOutboundRankDO); - } - - /** - * 导出商品出库排名(不分页全量) - */ - public List exportMaterialRankList(ExecutionOutboundRankDO executionOutboundRankDO) { - fillLoginContext(executionOutboundRankDO); - return executionOutboundRankDomainService.queryMaterialRankList(executionOutboundRankDO); - } - - /** - * 导出线路出库排名(不分页全量) - */ - public List exportLineRankList(ExecutionOutboundRankDO executionOutboundRankDO) { - fillLoginContext(executionOutboundRankDO); - return executionOutboundRankDomainService.queryLineRankList(executionOutboundRankDO); + return executionOutboundRankDomainService.queryDetailList(executionOutboundRankDO); } /** diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/service/ExecutionOutboundRankDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/service/ExecutionOutboundRankDomainService.java index ce87d4968..7966fe6bd 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/service/ExecutionOutboundRankDomainService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/service/ExecutionOutboundRankDomainService.java @@ -1,9 +1,8 @@ package com.mhd.oms.domain.outboundRank.service; import com.mhd.oms.domain.outboundRank.repository.facade.IExecutionOutboundRankService; -import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundLineRankPO; -import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundMaterialRankPO; -import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundRankTotalPO; +import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundDetailRankPO; +import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundDetailRankTotalPO; import com.mhd.oms.domain.outboundRank.repository.todo.ExecutionOutboundRankDO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -12,7 +11,7 @@ import org.springframework.stereotype.Service; import java.util.List; /** - * 出库排名统计领域服务 + * 出库排名统计(明细)领域服务 * * @author rcx * @date 2026-08-31 @@ -25,30 +24,16 @@ public class ExecutionOutboundRankDomainService { private IExecutionOutboundRankService executionOutboundRankService; /** - * 商品出库排名列表 + * 出库明细列表 */ - public List queryMaterialRankList(ExecutionOutboundRankDO executionOutboundRankDO) { - return executionOutboundRankService.queryMaterialRankList(executionOutboundRankDO); + public List queryDetailList(ExecutionOutboundRankDO executionOutboundRankDO) { + return executionOutboundRankService.queryDetailList(executionOutboundRankDO); } /** - * 线路出库排名列表 + * 出库明细合计(不分页) */ - public List queryLineRankList(ExecutionOutboundRankDO executionOutboundRankDO) { - return executionOutboundRankService.queryLineRankList(executionOutboundRankDO); - } - - /** - * 商品出库排名合计(不分页) - */ - public ExecutionOutboundRankTotalPO queryMaterialRankTotal(ExecutionOutboundRankDO executionOutboundRankDO) { - return executionOutboundRankService.queryMaterialRankTotal(executionOutboundRankDO); - } - - /** - * 线路出库排名合计(不分页) - */ - public ExecutionOutboundRankTotalPO queryLineRankTotal(ExecutionOutboundRankDO executionOutboundRankDO) { - return executionOutboundRankService.queryLineRankTotal(executionOutboundRankDO); + public ExecutionOutboundDetailRankTotalPO queryDetailTotal(ExecutionOutboundRankDO executionOutboundRankDO) { + return executionOutboundRankService.queryDetailTotal(executionOutboundRankDO); } } diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/outboundRank/ExecutionOutboundRankApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/outboundRank/ExecutionOutboundRankApi.java index f1222e413..87e70bbf7 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/outboundRank/ExecutionOutboundRankApi.java +++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/outboundRank/ExecutionOutboundRankApi.java @@ -4,9 +4,8 @@ import com.github.pagehelper.PageInfo; import com.mhd.common.core.constant.HttpStatus; import com.mhd.common.core.utils.PageUtils; import com.mhd.common.core.utils.poi.ExcelUtil; -import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundLineRankPO; -import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundMaterialRankPO; -import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundRankTotalPO; +import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundDetailRankPO; +import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundDetailRankTotalPO; import com.mhd.oms.domain.outboundRank.repository.todo.ExecutionOutboundRankDO; import com.mhd.oms.domain.outboundRank.repository.todo.ExecutionOutboundRankDTO; import com.mhd.oms.domain.outboundRank.service.ExecutionOutboundRankApplicationService; @@ -27,11 +26,11 @@ import java.util.List; /** * 出库排名统计Api * - *

按日期区间筛选,统计商品/线路出库量排名。OMS 库出库单状态不流转(无"已出库"数据), - * 数据源跨库取 WMS 库出库表(NGWL_TEST_WMS.stock_out_order / out_material_detail), - * 口径与 WMS 端 /outboundRankApi 完全一致,两边数字一致; - * 统计条件:出库单创建时间 + 已出库及之后状态(9,12,13),明细仅取 level=1 主行; - * 销售量=SUM(出库数量)、交易数=COUNT(DISTINCT 出库单号)、金额=SUM(明细总价)

+ *

按日期区间筛选出库明细列表(一行 = 仓单×货品,件数/毛重/体积按行汇总,按出库数量(销售量)降序,件数/出仓日期/单号次之)。 + * OMS 库出库单状态不流转(无"已出库"数据),数据源跨库取 WMS 库出库表(NGWL_TEST_WMS.stock_out_order / out_material_detail), + * 口径与 WMS 端 /outboundRankApi 完全一致,两边数字一致;统计条件:出库单创建时间 + 已出库及之后状态(9,12,13),明细仅取 level=1 主行。 + * 商品/线路两个 tab 各自独立接口,内部为同一份明细查询:商品接口忽略线路筛选参数,线路接口忽略商品筛选参数。 + * 字段:种类/仓单编号/入库单号/客户编号/收货人/货名/线路/件数/毛重(吨)/体积(CBM)/退保总额(占位null)/出仓日期

* * @author rcx * @date 2026-08-31 @@ -48,84 +47,97 @@ public class ExecutionOutboundRankApi { private ExecutionOutboundRankApplicationService executionOutboundRankApplicationService; /** - * 分页查询商品出库排名列表(含合计行) + * 分页查询商品出库排名列表(含合计行,商品tab;忽略线路筛选参数) */ @ApiOperation("分页查询商品出库排名列表") @GetMapping("/queryMaterialRankList") public HashMap queryMaterialRankList(ExecutionOutboundRankDTO executionOutboundRankDTO) { //转换实体 ExecutionOutboundRankDO executionOutboundRankDO = executionOutboundRankAssembler.toDO(executionOutboundRankDTO); + //商品tab:忽略线路筛选参数 + executionOutboundRankDO.setLineCode(null); + executionOutboundRankDO.setLineName(null); startPage(); - List list = executionOutboundRankApplicationService.queryMaterialRankList(executionOutboundRankDO); - ExecutionOutboundRankTotalPO total = executionOutboundRankApplicationService.queryMaterialRankTotal(executionOutboundRankDO); + List list = executionOutboundRankApplicationService.queryDetailList(executionOutboundRankDO); + ExecutionOutboundDetailRankTotalPO total = executionOutboundRankApplicationService.queryDetailTotal(executionOutboundRankDO); return getDataTableWithTotal(list, total); } /** - * 分页查询线路出库排名列表(含合计行) + * 分页查询线路出库排名列表(含合计行,线路tab;忽略商品筛选参数) */ @ApiOperation("分页查询线路出库排名列表") @GetMapping("/queryLineRankList") public HashMap queryLineRankList(ExecutionOutboundRankDTO executionOutboundRankDTO) { //转换实体 ExecutionOutboundRankDO executionOutboundRankDO = executionOutboundRankAssembler.toDO(executionOutboundRankDTO); + //线路tab:忽略商品筛选参数 + executionOutboundRankDO.setMaterialCode(null); + executionOutboundRankDO.setMaterialName(null); startPage(); - List list = executionOutboundRankApplicationService.queryLineRankList(executionOutboundRankDO); - ExecutionOutboundRankTotalPO total = executionOutboundRankApplicationService.queryLineRankTotal(executionOutboundRankDO); + List list = executionOutboundRankApplicationService.queryDetailList(executionOutboundRankDO); + ExecutionOutboundDetailRankTotalPO total = executionOutboundRankApplicationService.queryDetailTotal(executionOutboundRankDO); return getDataTableWithTotal(list, total); } /** - * 导出商品出库排名Excel + * 导出商品出库排名Excel(商品tab;忽略线路筛选参数) */ @ApiOperation("导出商品出库排名Excel") @GetMapping("/exportMaterialRank") public void exportMaterialRank(HttpServletResponse response, ExecutionOutboundRankDTO executionOutboundRankDTO) throws Exception { //转换实体(不分页,导出全量) ExecutionOutboundRankDO executionOutboundRankDO = executionOutboundRankAssembler.toDO(executionOutboundRankDTO); - List list = executionOutboundRankApplicationService.exportMaterialRankList(executionOutboundRankDO); + //商品tab:忽略线路筛选参数 + executionOutboundRankDO.setLineCode(null); + executionOutboundRankDO.setLineName(null); + List list = executionOutboundRankApplicationService.exportDetailList(executionOutboundRankDO); String fileName = URLEncoder.encode("商品出库排名", "UTF-8").replaceAll("\\+", "%20"); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); - ExcelUtil util = new ExcelUtil<>(ExecutionOutboundMaterialRankPO.class); + ExcelUtil util = new ExcelUtil<>(ExecutionOutboundDetailRankPO.class); util.exportExcel(response, list, "商品出库排名"); } /** - * 导出线路出库排名Excel + * 导出线路出库排名Excel(线路tab;忽略商品筛选参数) */ @ApiOperation("导出线路出库排名Excel") @GetMapping("/exportLineRank") public void exportLineRank(HttpServletResponse response, ExecutionOutboundRankDTO executionOutboundRankDTO) throws Exception { //转换实体(不分页,导出全量) ExecutionOutboundRankDO executionOutboundRankDO = executionOutboundRankAssembler.toDO(executionOutboundRankDTO); - List list = executionOutboundRankApplicationService.exportLineRankList(executionOutboundRankDO); + //线路tab:忽略商品筛选参数 + executionOutboundRankDO.setMaterialCode(null); + executionOutboundRankDO.setMaterialName(null); + List list = executionOutboundRankApplicationService.exportDetailList(executionOutboundRankDO); String fileName = URLEncoder.encode("线路出库排名", "UTF-8").replaceAll("\\+", "%20"); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); - ExcelUtil util = new ExcelUtil<>(ExecutionOutboundLineRankPO.class); + ExcelUtil util = new ExcelUtil<>(ExecutionOutboundDetailRankPO.class); util.exportExcel(response, list, "线路出库排名"); } /** - * 分页结果 + 合计行:data/total/code/msg 之外追加 totalSalesQuantity/totalTradeCount/totalAmount + * 分页结果 + 合计行:data/total/code/msg 之外追加 totalPieceCount/totalGrossWeightTon/totalVolume/totalOrderCount */ - private HashMap getDataTableWithTotal(List list, ExecutionOutboundRankTotalPO total) { + private HashMap getDataTableWithTotal(List list, ExecutionOutboundDetailRankTotalPO total) { HashMap result = new HashMap<>(); result.put("data", list); result.put("total", new PageInfo<>(list).getTotal()); result.put("code", HttpStatus.SUCCESS); result.put("msg", "查询成功"); if (total != null) { - result.put("totalSalesQuantity", total.getTotalSalesQuantity()); - result.put("totalTradeCount", total.getTotalTradeCount()); - result.put("totalAmount", total.getTotalAmount()); + result.put("totalPieceCount", total.getTotalPieceCount()); + result.put("totalGrossWeightTon", total.getTotalGrossWeightTon()); + result.put("totalVolume", total.getTotalVolume()); + result.put("totalOrderCount", total.getTotalOrderCount()); } return result; } diff --git a/mhd_oms/src/main/resources/mapper/outboundRank/ExecutionOutboundRankMapper.xml b/mhd_oms/src/main/resources/mapper/outboundRank/ExecutionOutboundRankMapper.xml index f35689979..9dae37f3f 100644 --- a/mhd_oms/src/main/resources/mapper/outboundRank/ExecutionOutboundRankMapper.xml +++ b/mhd_oms/src/main/resources/mapper/outboundRank/ExecutionOutboundRankMapper.xml @@ -5,14 +5,14 @@ a.del_flag = 1 @@ -36,6 +36,12 @@ and b.line_name like concat('%', #{lineName}, '%') + + and b.out_order_number like concat('%', #{outOrderNumber}, '%') + + + and a.in_order_number like concat('%', #{inOrderNumber}, '%') + and a.material_code like concat('%', #{materialCode}, '%') @@ -55,67 +61,50 @@ join NGWL_TEST_WMS.stock_out_order b on a.out_order_number = b.out_order_number and b.del_flag = 1 - - select - a.material_code AS materialCode, - MAX(a.material_name) AS materialName, - MAX(a.SPECIFICATION_MODEL) AS specificationModel, - MAX(a.unit_name) AS unitName, - IFNULL(SUM(a.outbound_quantity), 0) AS salesQuantity, - COUNT(DISTINCT a.out_order_number) AS tradeCount, - IFNULL(SUM(IFNULL(a.TOTAL_AMOUNT, 0)), 0) AS amount + MAX(b.ORDER_TYPE_NAME) AS orderTypeName, + b.out_order_number AS outOrderNumber, + MAX(a.in_order_number) AS inOrderNumber, + MAX(b.customer_code) AS customerCode, + MAX(IFNULL(b."TO", b.contact_person)) AS receiver, + a.material_code AS materialCode, + MAX(a.material_name) AS materialName, + MAX(b.line_code) AS lineCode, + MAX(b.line_name) AS lineName, + IFNULL(SUM(a.PIECE_COUNT), 0) AS pieceCount, + ROUND(IFNULL(SUM(a.TOTAL_GROSS_WEIGHT), 0) / 1000, 3) AS grossWeightTon, + IFNULL(SUM(a.TOTAL_VOLUME), 0) AS totalVolume, + MAX(IFNULL(b.OUTBOUND_DATE, IFNULL(b.COMPLETE_TIME, b.create_time))) AS outboundDate - GROUP BY a.material_code - order by salesQuantity desc + GROUP BY b.out_order_number, a.material_code + order by IFNULL(SUM(a.outbound_quantity), 0) desc, pieceCount desc, outboundDate desc, outOrderNumber desc - - select - b.line_code AS lineCode, - MAX(b.line_name) AS lineName, - IFNULL(SUM(a.outbound_quantity), 0) AS salesQuantity, - COUNT(DISTINCT b.out_order_number) AS tradeCount, - IFNULL(SUM(IFNULL(a.TOTAL_AMOUNT, 0)), 0) AS amount - - - - and b.line_code is not null and b.line_code != '' - - GROUP BY b.line_code - order by salesQuantity desc - - - - - - - diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/outboundRank/OutboundRankApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/outboundRank/OutboundRankApplicationService.java index 3f6d4d267..0082a8ed4 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/application/service/outboundRank/OutboundRankApplicationService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/outboundRank/OutboundRankApplicationService.java @@ -6,9 +6,8 @@ import com.mhd.common.security.utils.SecurityUtils; import com.mhd.system.api.domain.cache.AssociationWarehouseCacheDO; import com.mhd.system.api.domain.cache.SystemServiceCacheUtil; import com.mhd.system.api.model.LoginUser; -import com.mhd.wms.domain.outboundRank.repository.po.OutboundLineRankPO; -import com.mhd.wms.domain.outboundRank.repository.po.OutboundMaterialRankPO; -import com.mhd.wms.domain.outboundRank.repository.po.OutboundRankTotalPO; +import com.mhd.wms.domain.outboundRank.repository.po.OutboundDetailRankPO; +import com.mhd.wms.domain.outboundRank.repository.po.OutboundDetailRankTotalPO; import com.mhd.wms.domain.outboundRank.repository.todo.OutboundRankDO; import com.mhd.wms.domain.outboundRank.service.OutboundRankDomainService; import lombok.extern.slf4j.Slf4j; @@ -18,9 +17,9 @@ import org.springframework.stereotype.Service; import java.util.List; /** - * 出库排名统计应用服务 + * 出库排名统计(明细)应用服务 * - *

负责登录用户组织隔离注入、日期区间校验,统计逻辑在 OutboundRankDomainService → OutboundRankMapper.xml

+ *

负责登录用户组织隔离注入、日期区间校验,查询逻辑在 OutboundRankDomainService → OutboundRankMapper.xml

* * @author rcx * @date 2026-08-31 @@ -33,49 +32,26 @@ public class OutboundRankApplicationService { private OutboundRankDomainService outboundRankDomainService; /** - * 分页查询商品出库排名列表 + * 分页查询出库明细列表 */ - public List queryMaterialRankList(OutboundRankDO outboundRankDO) { + public List queryDetailList(OutboundRankDO outboundRankDO) { fillLoginContext(outboundRankDO); - return outboundRankDomainService.queryMaterialRankList(outboundRankDO); + return outboundRankDomainService.queryDetailList(outboundRankDO); } /** - * 分页查询线路出库排名列表 + * 出库明细合计(当前筛选条件全量,不分页) */ - public List queryLineRankList(OutboundRankDO outboundRankDO) { + public OutboundDetailRankTotalPO queryDetailTotal(OutboundRankDO outboundRankDO) { + return outboundRankDomainService.queryDetailTotal(outboundRankDO); + } + + /** + * 导出出库明细(不分页全量) + */ + public List exportDetailList(OutboundRankDO outboundRankDO) { fillLoginContext(outboundRankDO); - return outboundRankDomainService.queryLineRankList(outboundRankDO); - } - - /** - * 商品出库排名合计(当前筛选条件全量,不分页) - */ - public OutboundRankTotalPO queryMaterialRankTotal(OutboundRankDO outboundRankDO) { - return outboundRankDomainService.queryMaterialRankTotal(outboundRankDO); - } - - /** - * 线路出库排名合计(当前筛选条件全量,不分页) - */ - public OutboundRankTotalPO queryLineRankTotal(OutboundRankDO outboundRankDO) { - return outboundRankDomainService.queryLineRankTotal(outboundRankDO); - } - - /** - * 导出商品出库排名(不分页全量) - */ - public List exportMaterialRankList(OutboundRankDO outboundRankDO) { - fillLoginContext(outboundRankDO); - return outboundRankDomainService.queryMaterialRankList(outboundRankDO); - } - - /** - * 导出线路出库排名(不分页全量) - */ - public List exportLineRankList(OutboundRankDO outboundRankDO) { - fillLoginContext(outboundRankDO); - return outboundRankDomainService.queryLineRankList(outboundRankDO); + return outboundRankDomainService.queryDetailList(outboundRankDO); } /** diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/facade/IOutboundRankService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/facade/IOutboundRankService.java index 81981ab4b..f20e1a989 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/facade/IOutboundRankService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/facade/IOutboundRankService.java @@ -1,14 +1,13 @@ package com.mhd.wms.domain.outboundRank.repository.facade; -import com.mhd.wms.domain.outboundRank.repository.po.OutboundLineRankPO; -import com.mhd.wms.domain.outboundRank.repository.po.OutboundMaterialRankPO; -import com.mhd.wms.domain.outboundRank.repository.po.OutboundRankTotalPO; +import com.mhd.wms.domain.outboundRank.repository.po.OutboundDetailRankPO; +import com.mhd.wms.domain.outboundRank.repository.po.OutboundDetailRankTotalPO; import com.mhd.wms.domain.outboundRank.repository.todo.OutboundRankDO; import java.util.List; /** - * 出库排名统计Service接口 + * 出库排名统计(明细)Service接口 * * @author rcx * @date 2026-08-31 @@ -16,22 +15,12 @@ import java.util.List; public interface IOutboundRankService { /** - * 商品出库排名列表 + * 出库明细列表 */ - List queryMaterialRankList(OutboundRankDO outboundRankDO); + List queryDetailList(OutboundRankDO outboundRankDO); /** - * 线路出库排名列表 + * 出库明细合计(不分页) */ - List queryLineRankList(OutboundRankDO outboundRankDO); - - /** - * 商品出库排名合计(不分页) - */ - OutboundRankTotalPO queryMaterialRankTotal(OutboundRankDO outboundRankDO); - - /** - * 线路出库排名合计(不分页) - */ - OutboundRankTotalPO queryLineRankTotal(OutboundRankDO outboundRankDO); + OutboundDetailRankTotalPO queryDetailTotal(OutboundRankDO outboundRankDO); } diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/mapper/OutboundRankMapper.java b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/mapper/OutboundRankMapper.java index 40f17acc2..ee09b891f 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/mapper/OutboundRankMapper.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/mapper/OutboundRankMapper.java @@ -1,14 +1,13 @@ package com.mhd.wms.domain.outboundRank.repository.mapper; -import com.mhd.wms.domain.outboundRank.repository.po.OutboundLineRankPO; -import com.mhd.wms.domain.outboundRank.repository.po.OutboundMaterialRankPO; -import com.mhd.wms.domain.outboundRank.repository.po.OutboundRankTotalPO; +import com.mhd.wms.domain.outboundRank.repository.po.OutboundDetailRankPO; +import com.mhd.wms.domain.outboundRank.repository.po.OutboundDetailRankTotalPO; import com.mhd.wms.domain.outboundRank.repository.todo.OutboundRankDO; import java.util.List; /** - * 出库排名统计Mapper接口 + * 出库排名统计(明细)Mapper接口 * * @author rcx * @date 2026-08-31 @@ -16,22 +15,12 @@ import java.util.List; public interface OutboundRankMapper { /** - * 商品出库排名列表(按销售量倒序) + * 出库明细列表(一行=仓单×货品,按件数倒序) */ - List queryMaterialRankList(OutboundRankDO outboundRankDO); + List queryDetailList(OutboundRankDO outboundRankDO); /** - * 线路出库排名列表(按销售量倒序) + * 出库明细合计(不分页,当前筛选条件全量合计) */ - List queryLineRankList(OutboundRankDO outboundRankDO); - - /** - * 商品出库排名合计(不分页,当前筛选条件全量合计) - */ - OutboundRankTotalPO queryMaterialRankTotal(OutboundRankDO outboundRankDO); - - /** - * 线路出库排名合计(不分页,当前筛选条件全量合计) - */ - OutboundRankTotalPO queryLineRankTotal(OutboundRankDO outboundRankDO); + OutboundDetailRankTotalPO queryDetailTotal(OutboundRankDO outboundRankDO); } diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/persistence/OutboundRankImpl.java b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/persistence/OutboundRankImpl.java index 0acf88572..4108d2dd4 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/persistence/OutboundRankImpl.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/persistence/OutboundRankImpl.java @@ -2,9 +2,8 @@ package com.mhd.wms.domain.outboundRank.repository.persistence; import com.mhd.wms.domain.outboundRank.repository.facade.IOutboundRankService; import com.mhd.wms.domain.outboundRank.repository.mapper.OutboundRankMapper; -import com.mhd.wms.domain.outboundRank.repository.po.OutboundLineRankPO; -import com.mhd.wms.domain.outboundRank.repository.po.OutboundMaterialRankPO; -import com.mhd.wms.domain.outboundRank.repository.po.OutboundRankTotalPO; +import com.mhd.wms.domain.outboundRank.repository.po.OutboundDetailRankPO; +import com.mhd.wms.domain.outboundRank.repository.po.OutboundDetailRankTotalPO; import com.mhd.wms.domain.outboundRank.repository.todo.OutboundRankDO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -12,7 +11,7 @@ import org.springframework.stereotype.Service; import java.util.List; /** - * 出库排名统计Service业务层处理 + * 出库排名统计(明细)Service业务层处理 * * @author rcx * @date 2026-08-31 @@ -24,22 +23,12 @@ public class OutboundRankImpl implements IOutboundRankService { private OutboundRankMapper outboundRankMapper; @Override - public List queryMaterialRankList(OutboundRankDO outboundRankDO) { - return outboundRankMapper.queryMaterialRankList(outboundRankDO); + public List queryDetailList(OutboundRankDO outboundRankDO) { + return outboundRankMapper.queryDetailList(outboundRankDO); } @Override - public List queryLineRankList(OutboundRankDO outboundRankDO) { - return outboundRankMapper.queryLineRankList(outboundRankDO); - } - - @Override - public OutboundRankTotalPO queryMaterialRankTotal(OutboundRankDO outboundRankDO) { - return outboundRankMapper.queryMaterialRankTotal(outboundRankDO); - } - - @Override - public OutboundRankTotalPO queryLineRankTotal(OutboundRankDO outboundRankDO) { - return outboundRankMapper.queryLineRankTotal(outboundRankDO); + public OutboundDetailRankTotalPO queryDetailTotal(OutboundRankDO outboundRankDO) { + return outboundRankMapper.queryDetailTotal(outboundRankDO); } } diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundDetailRankPO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundDetailRankPO.java new file mode 100644 index 000000000..107dc9b0e --- /dev/null +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundDetailRankPO.java @@ -0,0 +1,85 @@ +package com.mhd.wms.domain.outboundRank.repository.po; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.mhd.common.core.annotation.Excel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 出库排名统计(明细)PO(一行 = 仓单×货品,件数/毛重/体积按行汇总) + * + *

字段口径:种类=出库单据类型;仓单编号=出库单号;收货人=出库单 TO 栏(为空取联系人); + * 毛重(吨)=明细总毛重KG/1000;出仓日期=出仓日期(为空依次兜底完成时间/创建时间); + * 退保总额为占位字段,后端暂无对应数据来源,恒为 null(候选:货品档案保额 insure_amount,确认后可补)

+ * + * @author rcx + * @date 2026-08-31 + */ +@Data +@ApiModel(value = "出库排名统计明细对象", description = "出库排名统计明细响应对象") +public class OutboundDetailRankPO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("种类(出库单据类型)") + @Excel(name = "种类") + private String orderTypeName; + + @ApiModelProperty("仓单编号(出库单号)") + @Excel(name = "仓单编号") + private String outOrderNumber; + + @ApiModelProperty("入库单号") + @Excel(name = "入库单号") + private String inOrderNumber; + + @ApiModelProperty("客户编号") + @Excel(name = "客户编号") + private String customerCode; + + @ApiModelProperty("收货人(出库单 TO 栏,为空取联系人)") + @Excel(name = "收货人") + private String receiver; + + @ApiModelProperty("商品货号(辅助字段,不导出)") + private String materialCode; + + @ApiModelProperty("货名") + @Excel(name = "货名") + private String materialName; + + @ApiModelProperty("线路编码(辅助字段,不导出)") + private String lineCode; + + @ApiModelProperty("线路") + @Excel(name = "线路") + private String lineName; + + @ApiModelProperty("件数") + @Excel(name = "件数") + private BigDecimal pieceCount; + + @ApiModelProperty("毛重(吨)") + @Excel(name = "毛重(吨)") + private BigDecimal grossWeightTon; + + @ApiModelProperty("体积(CBM)") + @Excel(name = "体积(CBM)") + private BigDecimal totalVolume; + + @ApiModelProperty("退保总额(占位字段,后端暂无数据来源,恒为 null)") + @Excel(name = "退保总额") + private BigDecimal depositRefundAmount; + + @ApiModelProperty("出仓日期(出仓日期为空时依次兜底完成时间/创建时间)") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @Excel(name = "出仓日期", width = 30, dateFormat = "yyyy-MM-dd") + private Date outboundDate; +} diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundDetailRankTotalPO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundDetailRankTotalPO.java new file mode 100644 index 000000000..5b37776c7 --- /dev/null +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundDetailRankTotalPO.java @@ -0,0 +1,36 @@ +package com.mhd.wms.domain.outboundRank.repository.po; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 出库排名统计(明细)合计PO + * + *

当前筛选条件下不分页的全量合计,随分页列表一起返回 + * (totalPieceCount/totalGrossWeightTon/totalVolume/totalOrderCount)

+ * + * @author rcx + * @date 2026-08-31 + */ +@Data +@ApiModel(value = "出库排名统计明细合计对象", description = "出库排名统计明细合计响应对象") +public class OutboundDetailRankTotalPO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("件数合计") + private BigDecimal totalPieceCount; + + @ApiModelProperty("毛重(吨)合计") + private BigDecimal totalGrossWeightTon; + + @ApiModelProperty("体积(CBM)合计") + private BigDecimal totalVolume; + + @ApiModelProperty("仓单数合计(去重出库单数)") + private Long totalOrderCount; +} diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundLineRankPO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundLineRankPO.java deleted file mode 100644 index 7f5c05c3c..000000000 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundLineRankPO.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.mhd.wms.domain.outboundRank.repository.po; - -import com.mhd.common.core.annotation.Excel; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; -import java.math.BigDecimal; - -/** - * 线路出库排名PO - * - *

按日期区间对出库单聚合:销售量=SUM(出库数量),交易数=COUNT(DISTINCT 出库单号),金额=SUM(明细总价); - * 仅统计带线路的出库单(line_code 为 2026-08-20 新增冗余字段,历史单为空)

- * - * @author rcx - * @date 2026-08-31 - */ -@Data -@ApiModel(value = "线路出库排名对象", description = "线路出库排名响应对象") -public class OutboundLineRankPO implements Serializable { - - private static final long serialVersionUID = 1L; - - @ApiModelProperty("线路编码") - @Excel(name = "线路编码") - private String lineCode; - - @ApiModelProperty("线路名称") - @Excel(name = "线路名称") - private String lineName; - - @ApiModelProperty("销售量(出库数量合计)") - @Excel(name = "销售量") - private BigDecimal salesQuantity; - - @ApiModelProperty("交易数(出库单据数)") - @Excel(name = "交易数") - private Long tradeCount; - - @ApiModelProperty("金额") - @Excel(name = "金额") - private BigDecimal amount; -} diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundMaterialRankPO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundMaterialRankPO.java deleted file mode 100644 index 9725d50ab..000000000 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundMaterialRankPO.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.mhd.wms.domain.outboundRank.repository.po; - -import com.mhd.common.core.annotation.Excel; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; -import java.math.BigDecimal; - -/** - * 商品出库排名PO - * - *

按日期区间对出库明细聚合:销售量=SUM(出库数量),交易数=COUNT(DISTINCT 出库单号),金额=SUM(明细总价)

- * - * @author rcx - * @date 2026-08-31 - */ -@Data -@ApiModel(value = "商品出库排名对象", description = "商品出库排名响应对象") -public class OutboundMaterialRankPO implements Serializable { - - private static final long serialVersionUID = 1L; - - @ApiModelProperty("商品货号") - @Excel(name = "商品货号") - private String materialCode; - - @ApiModelProperty("商品名称") - @Excel(name = "商品名称") - private String materialName; - - @ApiModelProperty("规格") - @Excel(name = "规格") - private String specificationModel; - - @ApiModelProperty("单位") - @Excel(name = "单位") - private String unitName; - - @ApiModelProperty("销售量(出库数量合计)") - @Excel(name = "销售量") - private BigDecimal salesQuantity; - - @ApiModelProperty("交易数(出库单据数)") - @Excel(name = "交易数") - private Long tradeCount; - - @ApiModelProperty("金额") - @Excel(name = "金额") - private BigDecimal amount; -} diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundRankTotalPO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundRankTotalPO.java deleted file mode 100644 index ea0e9ace9..000000000 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundRankTotalPO.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.mhd.wms.domain.outboundRank.repository.po; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import java.io.Serializable; -import java.math.BigDecimal; - -/** - * 出库排名合计PO - * - *

当前筛选条件下不分页的全量合计,随分页列表一起返回(totalSalesQuantity/totalTradeCount/totalAmount)

- * - * @author rcx - * @date 2026-08-31 - */ -@Data -@ApiModel(value = "出库排名合计对象", description = "出库排名合计响应对象") -public class OutboundRankTotalPO implements Serializable { - - private static final long serialVersionUID = 1L; - - @ApiModelProperty("销售量合计") - private BigDecimal totalSalesQuantity; - - @ApiModelProperty("交易数合计(去重出库单数)") - private Long totalTradeCount; - - @ApiModelProperty("金额合计") - private BigDecimal totalAmount; -} diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/todo/OutboundRankDO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/todo/OutboundRankDO.java index c38c77230..6ace89562 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/todo/OutboundRankDO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/todo/OutboundRankDO.java @@ -6,7 +6,7 @@ import lombok.Data; import java.io.Serializable; /** - * 出库排名统计查询DO + * 出库排名统计(明细)查询DO * *

topOrganizationId / warehouseId 由服务端按登录用户注入,前端不传

* @@ -24,10 +24,16 @@ public class OutboundRankDO implements Serializable { @ApiModelProperty("出库日期-结束 yyyy-MM-dd(必填)") private String createTimeEnd; + @ApiModelProperty("仓单编号/出库单号(模糊)") + private String outOrderNumber; + + @ApiModelProperty("入库单号(模糊)") + private String inOrderNumber; + @ApiModelProperty("商品货号(模糊)") private String materialCode; - @ApiModelProperty("商品名称(模糊)") + @ApiModelProperty("货名/商品名称(模糊)") private String materialName; @ApiModelProperty("线路编码(模糊)") diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/service/OutboundRankDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/service/OutboundRankDomainService.java index 1d2fe84c2..0b21ed65e 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/service/OutboundRankDomainService.java +++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/service/OutboundRankDomainService.java @@ -1,9 +1,8 @@ package com.mhd.wms.domain.outboundRank.service; import com.mhd.wms.domain.outboundRank.repository.facade.IOutboundRankService; -import com.mhd.wms.domain.outboundRank.repository.po.OutboundLineRankPO; -import com.mhd.wms.domain.outboundRank.repository.po.OutboundMaterialRankPO; -import com.mhd.wms.domain.outboundRank.repository.po.OutboundRankTotalPO; +import com.mhd.wms.domain.outboundRank.repository.po.OutboundDetailRankPO; +import com.mhd.wms.domain.outboundRank.repository.po.OutboundDetailRankTotalPO; import com.mhd.wms.domain.outboundRank.repository.todo.OutboundRankDO; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -12,7 +11,7 @@ import org.springframework.stereotype.Service; import java.util.List; /** - * 出库排名统计领域服务 + * 出库排名统计(明细)领域服务 * * @author rcx * @date 2026-08-31 @@ -25,30 +24,16 @@ public class OutboundRankDomainService { private IOutboundRankService outboundRankService; /** - * 商品出库排名列表 + * 出库明细列表 */ - public List queryMaterialRankList(OutboundRankDO outboundRankDO) { - return outboundRankService.queryMaterialRankList(outboundRankDO); + public List queryDetailList(OutboundRankDO outboundRankDO) { + return outboundRankService.queryDetailList(outboundRankDO); } /** - * 线路出库排名列表 + * 出库明细合计(不分页) */ - public List queryLineRankList(OutboundRankDO outboundRankDO) { - return outboundRankService.queryLineRankList(outboundRankDO); - } - - /** - * 商品出库排名合计(不分页) - */ - public OutboundRankTotalPO queryMaterialRankTotal(OutboundRankDO outboundRankDO) { - return outboundRankService.queryMaterialRankTotal(outboundRankDO); - } - - /** - * 线路出库排名合计(不分页) - */ - public OutboundRankTotalPO queryLineRankTotal(OutboundRankDO outboundRankDO) { - return outboundRankService.queryLineRankTotal(outboundRankDO); + public OutboundDetailRankTotalPO queryDetailTotal(OutboundRankDO outboundRankDO) { + return outboundRankService.queryDetailTotal(outboundRankDO); } } diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/outboundRank/OutboundRankDTO.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/outboundRank/OutboundRankDTO.java index eac2c07b5..8c32b7844 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/outboundRank/OutboundRankDTO.java +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/outboundRank/OutboundRankDTO.java @@ -3,27 +3,38 @@ package com.mhd.wms.interfaces.dto.outboundRank; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.io.Serializable; + /** - * 出库排名统计入参DTO + * 出库排名统计(明细)入参DTO * - *

按日期区间统计商品/线路出库量排名,统计口径:出库单创建时间 + 已出库及之后状态(9,12,13)

+ *

按日期区间筛选出库明细列表,一行 = 仓单×货品(件数/毛重/体积按行汇总,件数降序), + * 统计口径:出库单创建时间 + 已出库及之后状态(9,12,13) + 明细仅取 level=1 主行

* * @author rcx * @date 2026-08-31 */ @Data -public class OutboundRankDTO { +public class OutboundRankDTO implements Serializable { - @ApiModelProperty("出库日期-开始 yyyy-MM-dd(必填,按出库单创建时间统计)") + private static final long serialVersionUID = 1L; + + @ApiModelProperty("出库日期-开始 yyyy-MM-dd(必填,按出库单创建时间筛选)") private String createTimeStart; - @ApiModelProperty("出库日期-结束 yyyy-MM-dd(必填,按出库单创建时间统计)") + @ApiModelProperty("出库日期-结束 yyyy-MM-dd(必填,按出库单创建时间筛选)") private String createTimeEnd; + @ApiModelProperty("仓单编号/出库单号(模糊)") + private String outOrderNumber; + + @ApiModelProperty("入库单号(模糊)") + private String inOrderNumber; + @ApiModelProperty("商品货号(模糊)") private String materialCode; - @ApiModelProperty("商品名称(模糊)") + @ApiModelProperty("货名/商品名称(模糊)") private String materialName; @ApiModelProperty("线路编码(模糊)") diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/outboundRank/OutboundRankApi.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/outboundRank/OutboundRankApi.java index 439dbba78..8856a01a5 100644 --- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/outboundRank/OutboundRankApi.java +++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/outboundRank/OutboundRankApi.java @@ -5,9 +5,8 @@ import com.mhd.common.core.constant.HttpStatus; import com.mhd.common.core.utils.PageUtils; import com.mhd.common.core.utils.poi.ExcelUtil; import com.mhd.wms.application.service.outboundRank.OutboundRankApplicationService; -import com.mhd.wms.domain.outboundRank.repository.po.OutboundLineRankPO; -import com.mhd.wms.domain.outboundRank.repository.po.OutboundMaterialRankPO; -import com.mhd.wms.domain.outboundRank.repository.po.OutboundRankTotalPO; +import com.mhd.wms.domain.outboundRank.repository.po.OutboundDetailRankPO; +import com.mhd.wms.domain.outboundRank.repository.po.OutboundDetailRankTotalPO; import com.mhd.wms.domain.outboundRank.repository.todo.OutboundRankDO; import com.mhd.wms.interfaces.assember.outboundRank.OutboundRankAssembler; import com.mhd.wms.interfaces.dto.outboundRank.OutboundRankDTO; @@ -26,8 +25,10 @@ import java.util.List; /** * 出库排名统计Api * - *

按日期区间筛选,统计商品/线路出库量排名。统计口径:出库单创建时间 + 已出库及之后状态(9,12,13), - * 明细仅取 level=1 主行;销售量=SUM(出库数量)、交易数=COUNT(DISTINCT 出库单号)、金额=SUM(明细总价)

+ *

按日期区间筛选出库明细列表(一行 = 仓单×货品,件数/毛重/体积按行汇总,按出库数量(销售量)降序,件数/出仓日期/单号次之)。 + * 统计口径:出库单创建时间 + 已出库及之后状态(9,12,13),明细仅取 level=1 主行。 + * 商品/线路两个 tab 各自独立接口,内部为同一份明细查询:商品接口忽略线路筛选参数,线路接口忽略商品筛选参数。 + * 字段:种类/仓单编号/入库单号/客户编号/收货人/货名/线路/件数/毛重(吨)/体积(CBM)/退保总额(占位null)/出仓日期

* * @author rcx * @date 2026-08-31 @@ -43,84 +44,97 @@ public class OutboundRankApi { private OutboundRankApplicationService outboundRankApplicationService; /** - * 分页查询商品出库排名列表(含合计行) + * 分页查询商品出库排名列表(含合计行,商品tab;忽略线路筛选参数) */ @ApiOperation("分页查询商品出库排名列表") @GetMapping("/queryMaterialRankList") public HashMap queryMaterialRankList(OutboundRankDTO outboundRankDTO) { //转换实体 OutboundRankDO outboundRankDO = outboundRankAssembler.toDO(outboundRankDTO); + //商品tab:忽略线路筛选参数 + outboundRankDO.setLineCode(null); + outboundRankDO.setLineName(null); startPage(); - List list = outboundRankApplicationService.queryMaterialRankList(outboundRankDO); - OutboundRankTotalPO total = outboundRankApplicationService.queryMaterialRankTotal(outboundRankDO); + List list = outboundRankApplicationService.queryDetailList(outboundRankDO); + OutboundDetailRankTotalPO total = outboundRankApplicationService.queryDetailTotal(outboundRankDO); return getDataTableWithTotal(list, total); } /** - * 分页查询线路出库排名列表(含合计行) + * 分页查询线路出库排名列表(含合计行,线路tab;忽略商品筛选参数) */ @ApiOperation("分页查询线路出库排名列表") @GetMapping("/queryLineRankList") public HashMap queryLineRankList(OutboundRankDTO outboundRankDTO) { //转换实体 OutboundRankDO outboundRankDO = outboundRankAssembler.toDO(outboundRankDTO); + //线路tab:忽略商品筛选参数 + outboundRankDO.setMaterialCode(null); + outboundRankDO.setMaterialName(null); startPage(); - List list = outboundRankApplicationService.queryLineRankList(outboundRankDO); - OutboundRankTotalPO total = outboundRankApplicationService.queryLineRankTotal(outboundRankDO); + List list = outboundRankApplicationService.queryDetailList(outboundRankDO); + OutboundDetailRankTotalPO total = outboundRankApplicationService.queryDetailTotal(outboundRankDO); return getDataTableWithTotal(list, total); } /** - * 导出商品出库排名Excel + * 导出商品出库排名Excel(商品tab;忽略线路筛选参数) */ @ApiOperation("导出商品出库排名Excel") @GetMapping("/exportMaterialRank") public void exportMaterialRank(HttpServletResponse response, OutboundRankDTO outboundRankDTO) throws Exception { //转换实体(不分页,导出全量) OutboundRankDO outboundRankDO = outboundRankAssembler.toDO(outboundRankDTO); - List list = outboundRankApplicationService.exportMaterialRankList(outboundRankDO); + //商品tab:忽略线路筛选参数 + outboundRankDO.setLineCode(null); + outboundRankDO.setLineName(null); + List list = outboundRankApplicationService.exportDetailList(outboundRankDO); String fileName = URLEncoder.encode("商品出库排名", "UTF-8").replaceAll("\\+", "%20"); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); - ExcelUtil util = new ExcelUtil<>(OutboundMaterialRankPO.class); + ExcelUtil util = new ExcelUtil<>(OutboundDetailRankPO.class); util.exportExcel(response, list, "商品出库排名"); } /** - * 导出线路出库排名Excel + * 导出线路出库排名Excel(线路tab;忽略商品筛选参数) */ @ApiOperation("导出线路出库排名Excel") @GetMapping("/exportLineRank") public void exportLineRank(HttpServletResponse response, OutboundRankDTO outboundRankDTO) throws Exception { //转换实体(不分页,导出全量) OutboundRankDO outboundRankDO = outboundRankAssembler.toDO(outboundRankDTO); - List list = outboundRankApplicationService.exportLineRankList(outboundRankDO); + //线路tab:忽略商品筛选参数 + outboundRankDO.setMaterialCode(null); + outboundRankDO.setMaterialName(null); + List list = outboundRankApplicationService.exportDetailList(outboundRankDO); String fileName = URLEncoder.encode("线路出库排名", "UTF-8").replaceAll("\\+", "%20"); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); - ExcelUtil util = new ExcelUtil<>(OutboundLineRankPO.class); + ExcelUtil util = new ExcelUtil<>(OutboundDetailRankPO.class); util.exportExcel(response, list, "线路出库排名"); } /** - * 分页结果 + 合计行:data/total/code/msg 之外追加 totalSalesQuantity/totalTradeCount/totalAmount + * 分页结果 + 合计行:data/total/code/msg 之外追加 totalPieceCount/totalGrossWeightTon/totalVolume/totalOrderCount */ - private HashMap getDataTableWithTotal(List list, OutboundRankTotalPO total) { + private HashMap getDataTableWithTotal(List list, OutboundDetailRankTotalPO total) { HashMap result = new HashMap<>(); result.put("data", list); result.put("total", new PageInfo<>(list).getTotal()); result.put("code", HttpStatus.SUCCESS); result.put("msg", "查询成功"); if (total != null) { - result.put("totalSalesQuantity", total.getTotalSalesQuantity()); - result.put("totalTradeCount", total.getTotalTradeCount()); - result.put("totalAmount", total.getTotalAmount()); + result.put("totalPieceCount", total.getTotalPieceCount()); + result.put("totalGrossWeightTon", total.getTotalGrossWeightTon()); + result.put("totalVolume", total.getTotalVolume()); + result.put("totalOrderCount", total.getTotalOrderCount()); } return result; } diff --git a/mhd_wms/src/main/resources/mapper/outboundRank/OutboundRankMapper.xml b/mhd_wms/src/main/resources/mapper/outboundRank/OutboundRankMapper.xml index 54aa7458b..af1abf512 100644 --- a/mhd_wms/src/main/resources/mapper/outboundRank/OutboundRankMapper.xml +++ b/mhd_wms/src/main/resources/mapper/outboundRank/OutboundRankMapper.xml @@ -5,10 +5,11 @@ a.del_flag = 1 @@ -35,6 +36,18 @@ and b.line_name like concat('%', #{lineName}, '%') + + and b.out_order_number like concat('%', #{outOrderNumber}, '%') + + + and a.in_order_number like concat('%', #{inOrderNumber}, '%') + + + and a.material_code like concat('%', #{materialCode}, '%') + + + and a.material_name like concat('%', #{materialName}, '%') + and date_format(b.create_time,'%Y-%m-%d') >= #{createTimeStart} @@ -48,79 +61,50 @@ join stock_out_order b on a.out_order_number = b.out_order_number and b.del_flag = 1 - - select - a.material_code AS materialCode, - MAX(a.material_name) AS materialName, - MAX(a.SPECIFICATION_MODEL) AS specificationModel, - MAX(a.unit_name) AS unitName, - IFNULL(SUM(a.outbound_quantity), 0) AS salesQuantity, - COUNT(DISTINCT a.out_order_number) AS tradeCount, - IFNULL(SUM(IFNULL(a.TOTAL_AMOUNT, 0)), 0) AS amount + MAX(b.ORDER_TYPE_NAME) AS orderTypeName, + b.out_order_number AS outOrderNumber, + MAX(a.in_order_number) AS inOrderNumber, + MAX(b.customer_code) AS customerCode, + MAX(IFNULL(b."TO", b.contact_person)) AS receiver, + a.material_code AS materialCode, + MAX(a.material_name) AS materialName, + MAX(b.line_code) AS lineCode, + MAX(b.line_name) AS lineName, + IFNULL(SUM(a.PIECE_COUNT), 0) AS pieceCount, + ROUND(IFNULL(SUM(a.TOTAL_GROSS_WEIGHT), 0) / 1000, 3) AS grossWeightTon, + IFNULL(SUM(a.TOTAL_VOLUME), 0) AS totalVolume, + MAX(IFNULL(b.OUTBOUND_DATE, IFNULL(b.COMPLETE_TIME, b.create_time))) AS outboundDate - - and a.material_code like concat('%', #{materialCode}, '%') - - - and a.material_name like concat('%', #{materialName}, '%') - - GROUP BY a.material_code - order by salesQuantity desc + GROUP BY b.out_order_number, a.material_code + order by IFNULL(SUM(a.outbound_quantity), 0) desc, pieceCount desc, outboundDate desc, outOrderNumber desc - - select - b.line_code AS lineCode, - MAX(b.line_name) AS lineName, - IFNULL(SUM(a.outbound_quantity), 0) AS salesQuantity, - COUNT(DISTINCT b.out_order_number) AS tradeCount, - IFNULL(SUM(IFNULL(a.TOTAL_AMOUNT, 0)), 0) AS amount - - - - and b.line_code is not null and b.line_code != '' - - GROUP BY b.line_code - order by salesQuantity desc - - - - - - -