From 76d95c1b2dfae8cdbbb6b8bfea0dd045ac140aef Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Thu, 27 Aug 2026 14:10:38 +0800
Subject: [PATCH 01/87] =?UTF-8?q?feat(oms):=E5=85=A5=E5=BA=93=E4=B8=9A?=
=?UTF-8?q?=E5=8A=A1=E5=8D=95=E5=AF=BC=E5=85=A5=E6=A8=A1=E6=9D=BFOrderNO?=
=?UTF-8?q?=E6=94=B9=E4=B8=BA=E5=8F=AA=E4=BD=9C=E4=B8=9A=E5=8A=A1=E5=8D=95?=
=?UTF-8?q?=E5=8F=B7=EF=BC=8C=E5=8E=BB=E6=8E=89=E6=A0=BC=E5=BC=8F=E6=A0=A1?=
=?UTF-8?q?=E9=AA=8C=E5=B9=B6=E6=8C=89=E4=B8=9A=E5=8A=A1=E5=8D=95=E5=8F=B7?=
=?UTF-8?q?=E6=9F=A5=E9=87=8D=20=E9=9C=80=E6=B1=82=EF=BC=9A=E5=AF=BC?=
=?UTF-8?q?=E5=85=A5=E6=A8=A1=E6=9D=BF=E8=A1=A8=E6=A0=BCOrderNO=E5=80=BC?=
=?UTF-8?q?=E5=9B=9E=E6=98=BE=E5=88=B0=E5=AD=97=E6=AE=B5"=E4=B8=9A?=
=?UTF-8?q?=E5=8A=A1=E5=8D=95=E5=8F=B7"=EF=BC=9B"=E5=85=A5=E5=BA=93?=
=?UTF-8?q?=E4=B8=9A=E5=8A=A1=E5=8D=95=E5=8F=B7"=E4=BB=8D=E7=94=B1?=
=?UTF-8?q?=E7=B3=BB=E7=BB=9F=20=E5=8E=9F=E6=9C=AC=E9=80=BB=E8=BE=91?=
=?UTF-8?q?=E7=94=9F=E6=88=90=EF=BC=9B=E4=B8=9A=E5=8A=A1=E5=8D=95=E5=8F=B7?=
=?UTF-8?q?=E9=87=8D=E5=A4=8D=E4=B8=8D=E5=85=81=E8=AE=B8=E5=AF=BC=E5=85=A5?=
=?UTF-8?q?=E5=B9=B6=E6=8F=90=E7=A4=BA"=E4=B8=9A=E5=8A=A1=E5=8D=95?=
=?UTF-8?q?=E5=8F=B7=E5=B7=B2=E5=AD=98=E5=9C=A8"=EF=BC=9B=E6=A8=A1?=
=?UTF-8?q?=E6=9D=BF=E6=9C=AA=E5=A1=AB=E5=8D=95=E5=8F=B7=20=E4=BF=9D?=
=?UTF-8?q?=E6=8C=81=E7=8E=B0=E6=9C=89=E7=B3=BB=E7=BB=9F=E9=80=BB=E8=BE=91?=
=?UTF-8?q?=EF=BC=9B=E4=B8=9A=E5=8A=A1=E5=8D=95=E5=8F=B7=E5=8E=BB=E6=8E=89?=
=?UTF-8?q?=E8=A7=84=E5=88=99=E6=A0=A1=E9=AA=8C=E3=80=82=20=E4=B8=80?=
=?UTF-8?q?=E3=80=81=E5=AF=BC=E5=85=A5=E6=B5=81=E7=A8=8B(ReservationStockI?=
=?UTF-8?q?nOrderImpl.parseStockInExcel)=EF=BC=9A=20=20=20=201.=20?=
=?UTF-8?q?=E6=A8=A1=E6=9D=BFOrderNO=E5=8F=AA=E5=86=99=E5=85=A5=E4=B8=9A?=
=?UTF-8?q?=E5=8A=A1=E5=8D=95=E5=8F=B7(business=5Forder=5Fno)=EF=BC=8C?=
=?UTF-8?q?=E4=B8=8D=E5=86=8D=E5=90=8C=E6=97=B6=E4=BD=9C=E4=B8=BA=E5=85=A5?=
=?UTF-8?q?=E5=BA=93=E4=B8=9A=E5=8A=A1=E5=8D=95=E5=8F=B7=20=20=20=202.=20?=
=?UTF-8?q?=E5=88=A0=E9=99=A4validateTemplateOrderNo=E6=A0=BC=E5=BC=8F?=
=?UTF-8?q?=E8=A7=84=E5=88=99=E6=A0=A1=E9=AA=8C(R+=E5=B9=B4=E6=9C=88?=
=?UTF-8?q?=E6=97=A5+3=E4=BD=8D=E5=BA=8F=E5=8F=B7)=EF=BC=8C=E6=A8=A1?=
=?UTF-8?q?=E6=9D=BF=E5=8D=95=E5=8F=B7=E4=B8=8D=E5=86=8D=E9=99=90=E6=A0=BC?=
=?UTF-8?q?=E5=BC=8F=20=20=20=203.=20=E6=9F=A5=E9=87=8D=E7=94=B1=E6=8C=89i?=
=?UTF-8?q?n=5Forder=5Fnumber=E8=B7=A8=E4=B8=A4=E8=A1=A8=E6=94=B9=E4=B8=BA?=
=?UTF-8?q?=E6=8C=89business=5Forder=5Fno=E6=9F=A5=E5=85=A5=E5=BA=93?=
=?UTF-8?q?=E4=B8=9A=E5=8A=A1=E5=8D=95=E8=A1=A8=EF=BC=8C=20=20=20=20=20=20?=
=?UTF-8?q?=20Mapper=E6=96=B0=E5=A2=9EexistsByBusinessOrderNo=EF=BC=9B?=
=?UTF-8?q?=E9=87=8D=E5=A4=8D=E6=97=B6=E6=8A=A5"=E4=B8=9A=E5=8A=A1?=
=?UTF-8?q?=E5=8D=95=E5=8F=B7=E5=B7=B2=E5=AD=98=E5=9C=A8=EF=BC=9Axxx?=
=?UTF-8?q?=EF=BC=8C=E8=AF=B7=E4=BF=AE=E6=94=B9=20=20=20=20=20=20=20?=
=?UTF-8?q?=E6=A8=A1=E6=9D=BF=E4=B8=AD=E7=9A=84OrderNO=E5=90=8E=E9=87=8D?=
=?UTF-8?q?=E6=96=B0=E5=AF=BC=E5=85=A5"=20=20=20=204.=20=E5=85=A5=E5=BA=93?=
=?UTF-8?q?=E4=B8=9A=E5=8A=A1=E5=8D=95=E5=8F=B7(in=5Forder=5Fnumber)?=
=?UTF-8?q?=E7=BB=9F=E4=B8=80=E7=94=B1insertDomain=E6=8C=89=E5=8E=9F?=
=?UTF-8?q?=E9=80=BB=E8=BE=91=E7=94=9F=E6=88=90=20=20=20=20=20=20=20(R+?=
=?UTF-8?q?=E5=B9=B4=E6=9C=88=E6=97=A5+=E5=BD=93=E6=97=A5=E7=B4=AF?=
=?UTF-8?q?=E5=8A=A0=EF=BC=8C=E8=B7=A8reservation/reserve=E4=B8=A4?=
=?UTF-8?q?=E8=A1=A8=E5=8F=96=E5=8F=B7=E9=98=B2=E6=92=9E)=20=E4=BA=8C?=
=?UTF-8?q?=E3=80=81insertDomain=E4=B8=9A=E5=8A=A1=E5=8D=95=E5=8F=B7?=
=?UTF-8?q?=E8=B5=8B=E5=80=BC=E6=94=B9=E4=B8=BA=E4=BB=85=E5=9C=A8=E4=B8=BA?=
=?UTF-8?q?=E7=A9=BA=E6=97=B6=E9=BB=98=E8=AE=A4=3D=E5=85=A5=E5=BA=93?=
=?UTF-8?q?=E5=8D=95=E5=8F=B7=EF=BC=8C=E5=AF=BC=E5=85=A5=E5=B8=A6=E6=A8=A1?=
=?UTF-8?q?=E6=9D=BF=E5=8D=95=E5=8F=B7=E6=97=B6=E4=B8=8D=E8=A6=86=E7=9B=96?=
=?UTF-8?q?=EF=BC=9B=20=20=20=20=E6=A8=A1=E6=9D=BF=E6=9C=AA=E5=A1=AB?=
=?UTF-8?q?=E5=8D=95=E5=8F=B7=E4=BF=9D=E6=8C=81=E7=8E=B0=E6=9C=89=E9=80=BB?=
=?UTF-8?q?=E8=BE=91=E3=80=82=E9=A1=B5=E9=9D=A2=E6=89=8B=E5=B7=A5=E6=96=B0?=
=?UTF-8?q?=E5=A2=9E(DomainService.insert)=E4=B8=8E=E5=AE=A2=E6=88=B7?=
=?UTF-8?q?=E9=A2=84=E7=BA=A6=E4=B8=8B=E5=8F=91=20=20=20=20(ReserveStockIn?=
=?UTF-8?q?OrderDomainService)=E4=B8=BA=E7=8B=AC=E7=AB=8B=E9=93=BE?=
=?UTF-8?q?=E8=B7=AF=EF=BC=8C=E4=B8=8D=E5=8F=97=E5=BD=B1=E5=93=8D=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../mapper/ReservationStockInOrderMapper.java | 2 +
.../ReservationStockInOrderImpl.java | 51 +++++--------------
.../ReservationStockInOrderMapper.xml | 5 ++
3 files changed, 21 insertions(+), 37 deletions(-)
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/mapper/ReservationStockInOrderMapper.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/mapper/ReservationStockInOrderMapper.java
index 8f6078a99..2d23240eb 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/mapper/ReservationStockInOrderMapper.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/mapper/ReservationStockInOrderMapper.java
@@ -77,4 +77,6 @@ public interface ReservationStockInOrderMapper extends BaseMapper generateReserveOrderNumber1(@Param("prefix") String prefix);
int existsByOrderNumber(@Param("inOrderNumber") String inOrderNumber);
+
+ int existsByBusinessOrderNo(@Param("businessOrderNo") String businessOrderNo);
}
\ No newline at end of file
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java
index 26d21686d..5116ef9b0 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java
@@ -486,25 +486,17 @@ public class ReservationStockInOrderImpl extends ServiceImpl 0
- || reservationStockInOrderMapper.countByInOrderNumber(templateOrderNo) > 0;
- if (duplicated) {
- throw new ServiceException("入库业务单号已存在:" + templateOrderNo + ",请修改模板中的OrderNO后重新导入");
+ // 按业务单号查重(入库业务单表 business_order_no 字段)
+ if (stockInOrderMapper.existsByBusinessOrderNo(templateOrderNo) > 0) {
+ throw new ServiceException("业务单号已存在:" + templateOrderNo + ",请修改模板中的OrderNO后重新导入");
}
+ reservationStockInOrderDO.setBusinessOrderNo(templateOrderNo);
}
- if (templateOrderNo.isEmpty()) {
- templateOrderNo = reservationStockInOrderDomainService.generateReserveOrderNumber();
- }
- reservationStockInOrderDO.setInOrderNumber(templateOrderNo);
- reservationStockInOrderDO.setBusinessOrderNo(templateOrderNo);
reservationStockInOrderDO.setOrganizationId(loginUser.getUserPo().getOrganizationId());
reservationStockInOrderDO.setOrganizationName(loginUser.getUserPo().getOrganizationName());
reservationStockInOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
@@ -597,25 +589,6 @@ public class ReservationStockInOrderImpl extends ServiceImpl
SELECT COUNT(1) FROM reservation_stock_in_order WHERE in_order_number = #{inOrderNumber}
+
+
+
\ No newline at end of file
From 5e3a0d86d0b6c358fcca5486531c0721b6d3dd22 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Thu, 27 Aug 2026 14:21:23 +0800
Subject: [PATCH 02/87] =?UTF-8?q?=E5=8F=91=E6=B5=8B=E8=AF=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/com/mhd/system/api/BmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/OmsServiceFeign.java | 2 +-
.../main/java/com/mhd/system/api/WlhyServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/YmsServiceFeign.java | 2 +-
.../com/mhd/common/core/feign/ThirdPartyServiceFeign.java | 2 +-
.../oms/infrastructure/feign/ThirdPartyServiceFeign.java | 2 +-
mhd_oms/src/main/resources/bootstrap.yml | 8 ++++----
8 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
index 8cc8bfd57..0d65c89a1 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
@@ -18,7 +18,7 @@ import java.util.Set;
/**
* bms财务结算系统feign调用接口
*/
-@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.32:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.33.0.129:8012",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface BmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
index 4ef3bed80..8a7006304 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.concurrent.CompletableFuture;
-@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.33:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.33.0.99:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface OmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
index d976fcc98..ba9a45148 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
@@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
-@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.102.192.31:8014",configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.33.0.129:8014",configuration = FeignAutoConfiguration.class)
public interface WlhyServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
index 1fe69a003..7fbd7dd9b 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
@@ -21,7 +21,7 @@ import java.util.Map;
* @description: TODO
* @date 2024/5/10 8:58
**/
-@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.32:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.33.0.109:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface WmsServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
index 750ed853e..beba5b1af 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
@@ -9,7 +9,7 @@ import com.mhd.system.api.feign.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
-@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.33:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.33.0.99:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface YmsServiceFeign {
/**
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
index 509644885..9fd21ae67 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
@@ -26,7 +26,7 @@ import java.io.InputStream;
import java.util.List;
import java.util.Map;
-@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.31:8012", configuration = FeignAutoConfiguration.class)
+@FeignClient(value = "mhd-third-party-service",url = "http://10.33.0.129:8012",configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
index 8c86ae1ad..376500b1c 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
@@ -22,7 +22,7 @@ import java.util.Map;
/**
* 三方服务 Feign
*/
-@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.31:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.33.0.129:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/resources/bootstrap.yml b/mhd_oms/src/main/resources/bootstrap.yml
index 542b6bce7..88471e390 100644
--- a/mhd_oms/src/main/resources/bootstrap.yml
+++ b/mhd_oms/src/main/resources/bootstrap.yml
@@ -18,15 +18,15 @@ spring:
discovery:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
-# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.31:6848
+ server-addr: 10.33.0.129:6010
+# server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
config:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
-# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.31:6848
+ server-addr: 10.33.0.129:6010
+# server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From e3058d8eb14d52f4dd9931873b10a670d198d701 Mon Sep 17 00:00:00 2001
From: zhaoqing <3160641494@qq.com>
Date: Thu, 27 Aug 2026 14:24:58 +0800
Subject: [PATCH 03/87] =?UTF-8?q?fix(oms):=E6=98=8E=E7=BB=86=E8=A1=A8?=
=?UTF-8?q?=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../executionInMaterialDetailMapper.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mhd_oms/src/main/resources/mapper/executionInMaterialDetail/executionInMaterialDetailMapper.xml b/mhd_oms/src/main/resources/mapper/executionInMaterialDetail/executionInMaterialDetailMapper.xml
index cb7efac12..66dc5a801 100644
--- a/mhd_oms/src/main/resources/mapper/executionInMaterialDetail/executionInMaterialDetailMapper.xml
+++ b/mhd_oms/src/main/resources/mapper/executionInMaterialDetail/executionInMaterialDetailMapper.xml
@@ -412,7 +412,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
b.warehouse_date
from execution_in_material_detail a
left join execution_stock_in_order b on a.in_order_number = b.in_order_number
- left join material_base_info c on a.material_base_info_id = c.material_base_info_id
+ left join NGWL_TEST_WMS.material_base_info c on a.material_base_info_id = c.material_base_info_id
and a.organization_id = #{organizationId}
From 7b0d08a132cc8ace450270917a1c4bd3af08a226 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Thu, 27 Aug 2026 16:33:43 +0800
Subject: [PATCH 04/87] =?UTF-8?q?=E5=8F=9130?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/com/mhd/system/api/BmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/OmsServiceFeign.java | 2 +-
.../main/java/com/mhd/system/api/WlhyServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/YmsServiceFeign.java | 2 +-
.../com/mhd/common/core/feign/ThirdPartyServiceFeign.java | 2 +-
.../oms/infrastructure/feign/ThirdPartyServiceFeign.java | 2 +-
mhd_oms/src/main/resources/bootstrap.yml | 8 ++++----
8 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
index 0d65c89a1..e18484e8d 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
@@ -18,7 +18,7 @@ import java.util.Set;
/**
* bms财务结算系统feign调用接口
*/
-@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.33.0.129:8012",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.3:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface BmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
index 8a7006304..e9418197a 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.concurrent.CompletableFuture;
-@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.33.0.99:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.4:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface OmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
index ba9a45148..de19e469b 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
@@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
-@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.33.0.129:8014",configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "commonWlhyServiceFeign",url = "http://10.102.192.30:8014",value = ServiceNameConstants.WLHY_SERVICE,configuration = FeignAutoConfiguration.class)
public interface WlhyServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
index 7fbd7dd9b..26a92624c 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
@@ -21,7 +21,7 @@ import java.util.Map;
* @description: TODO
* @date 2024/5/10 8:58
**/
-@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.33.0.109:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.3:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface WmsServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
index beba5b1af..12571141a 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
@@ -9,7 +9,7 @@ import com.mhd.system.api.feign.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
-@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.33.0.99:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.4:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface YmsServiceFeign {
/**
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
index 9fd21ae67..6238639f6 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
@@ -26,7 +26,7 @@ import java.io.InputStream;
import java.util.List;
import java.util.Map;
-@FeignClient(value = "mhd-third-party-service",url = "http://10.33.0.129:8012",configuration = FeignAutoConfiguration.class)
+@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.30:8012", configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
index 376500b1c..ca93d3312 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
@@ -22,7 +22,7 @@ import java.util.Map;
/**
* 三方服务 Feign
*/
-@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.33.0.129:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.30:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/resources/bootstrap.yml b/mhd_oms/src/main/resources/bootstrap.yml
index 88471e390..ee058f0f6 100644
--- a/mhd_oms/src/main/resources/bootstrap.yml
+++ b/mhd_oms/src/main/resources/bootstrap.yml
@@ -18,15 +18,15 @@ spring:
discovery:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
- server-addr: 10.33.0.129:6010
-# server-addr: 10.102.192.30:6848
+# server-addr: 10.33.0.129:6010
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
config:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
- server-addr: 10.33.0.129:6010
-# server-addr: 10.102.192.30:6848
+# server-addr: 10.33.0.129:6010
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From 5127123236f3baaf46c5dcac6d62f098d6b91f63 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Thu, 27 Aug 2026 16:38:33 +0800
Subject: [PATCH 05/87] =?UTF-8?q?=E5=8F=9131?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/com/mhd/system/api/BmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/OmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WlhyServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/YmsServiceFeign.java | 2 +-
.../com/mhd/common/core/feign/ThirdPartyServiceFeign.java | 2 +-
.../mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java | 2 +-
mhd_oms/src/main/resources/bootstrap.yml | 4 ++--
8 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
index e18484e8d..8cc8bfd57 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
@@ -18,7 +18,7 @@ import java.util.Set;
/**
* bms财务结算系统feign调用接口
*/
-@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.3:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.32:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface BmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
index e9418197a..4ef3bed80 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.concurrent.CompletableFuture;
-@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.4:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.33:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface OmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
index de19e469b..d976fcc98 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
@@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
-@FeignClient(contextId = "commonWlhyServiceFeign",url = "http://10.102.192.30:8014",value = ServiceNameConstants.WLHY_SERVICE,configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.102.192.31:8014",configuration = FeignAutoConfiguration.class)
public interface WlhyServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
index 26a92624c..1fe69a003 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
@@ -21,7 +21,7 @@ import java.util.Map;
* @description: TODO
* @date 2024/5/10 8:58
**/
-@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.3:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.32:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface WmsServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
index 12571141a..750ed853e 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
@@ -9,7 +9,7 @@ import com.mhd.system.api.feign.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
-@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.4:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.33:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface YmsServiceFeign {
/**
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
index 6238639f6..509644885 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
@@ -26,7 +26,7 @@ import java.io.InputStream;
import java.util.List;
import java.util.Map;
-@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.30:8012", configuration = FeignAutoConfiguration.class)
+@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.31:8012", configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
index ca93d3312..8c86ae1ad 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
@@ -22,7 +22,7 @@ import java.util.Map;
/**
* 三方服务 Feign
*/
-@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.30:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.31:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/resources/bootstrap.yml b/mhd_oms/src/main/resources/bootstrap.yml
index ee058f0f6..542b6bce7 100644
--- a/mhd_oms/src/main/resources/bootstrap.yml
+++ b/mhd_oms/src/main/resources/bootstrap.yml
@@ -19,14 +19,14 @@ spring:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
config:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From 627376da076341191546c657218a87081008b609 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Fri, 28 Aug 2026 09:13:10 +0800
Subject: [PATCH 06/87] =?UTF-8?q?feat(sys):=E8=B4=B9=E7=94=A8=E7=A7=91?=
=?UTF-8?q?=E7=9B=AE=E5=A2=9E=E5=8A=A0=E5=A4=8D=E5=88=B6=E3=80=81=E5=AF=BC?=
=?UTF-8?q?=E5=87=BA=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
1、新增 POST /expenseAccountApi/copy 复制接口(回显式,清空主键及科目编码)
2、新增 GET/POST /expenseAccountApi/export 导出接口(按列表查询条件+数据权限全量导出)
3、新增 ExpenseAccountExportVO 导出对象(27列业务字段)
---
.../ExpenseAccountApplicationService.java | 51 +++++++++++++++++++
.../expenseAccount/ExpenseAccountApi.java | 45 ++++++++++++++++
2 files changed, 96 insertions(+)
diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/expenseAccount/ExpenseAccountApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/expenseAccount/ExpenseAccountApplicationService.java
index 6bfb55e13..11dddd5a9 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/expenseAccount/ExpenseAccountApplicationService.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/expenseAccount/ExpenseAccountApplicationService.java
@@ -13,6 +13,7 @@ import com.mhd.basic.application.service.contractManage.ContractManageApplicatio
import com.mhd.basic.domain.expenseAccount.service.ExpenseAccountDomainService;
import com.mhd.basic.infrastructure.feign.vo.SysDictDataVo;
import com.mhd.basic.interfaces.dto.expenseAccount.ExpenseAccountDTO;
+import com.mhd.basic.interfaces.dto.expenseAccount.ExpenseAccountExportVO;
import com.mhd.basic.interfaces.dto.expenseAccount.SearchExpenseAccountDTO;
import com.mhd.common.core.enums.DictCode;
import com.mhd.common.core.exception.ServiceException;
@@ -27,6 +28,7 @@ import com.mhd.system.api.SystemServiceFeign;
import com.mhd.system.api.model.LoginUser;
import com.mhd.common.core.domain.po.UserPo;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -378,6 +380,55 @@ public class ExpenseAccountApplicationService {
return expenseAccountDomainService.getInfo(expenseAccountId);
}
+ /**
+ * 复制费用科目-获取原科目数据供前端回显
+ * 前端拿到数据后回显到新增弹窗,用户填写新科目编码后通过 /edit 接口(id 为空走新增)提交保存。
+ * 清空科目编码是为了避免直接复制出重复编码(费用科目编码无唯一性校验)。
+ */
+ public ExpenseAccountPO copy(ExpenseAccountDTO expenseAccountDTO) {
+ if (expenseAccountDTO == null || expenseAccountDTO.getExpenseAccountId() == null) {
+ throw new ServiceException("原费用科目id不能为空");
+ }
+ // 获取原费用科目信息
+ ExpenseAccountPO original = expenseAccountDomainService.getInfo(expenseAccountDTO.getExpenseAccountId());
+ if (null == original) {
+ throw new ServiceException("原费用科目信息未找到");
+ }
+ // 清空主键,前端提交时走新增
+ original.setExpenseAccountId(null);
+ // 清空科目编码,强制用户输入新编码,避免编码重复
+ original.setSubjectCode(null);
+ // 清空审计字段,新增时由 ExpenseAccountAssembler 重新生成
+ original.setCreateBy(null);
+ original.setCreateByName(null);
+ original.setCreateTime(null);
+ original.setUpdateBy(null);
+ original.setUpdateByName(null);
+ original.setUpdateTime(null);
+ original.setDelFlag(null);
+ // 清空非表字段
+ original.setUnit(null);
+ original.setExpenseAccountPOList(null);
+ return original;
+ }
+
+ /**
+ * 构建费用科目导出数据(不分页全量,按列表页查询条件 + 数据权限过滤)
+ */
+ public List buildExportList(ExpenseAccountDO expenseAccountDO) {
+ List exportList = new ArrayList<>();
+ List list = this.queryList(expenseAccountDO);
+ if (list == null || list.isEmpty()) {
+ return exportList;
+ }
+ for (ExpenseAccountPO po : list) {
+ ExpenseAccountExportVO vo = new ExpenseAccountExportVO();
+ BeanUtils.copyProperties(po, vo);
+ exportList.add(vo);
+ }
+ return exportList;
+ }
+
/**
* 修改状态
* @param expenseAccountDTO
diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facade/expenseAccount/ExpenseAccountApi.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facade/expenseAccount/ExpenseAccountApi.java
index 8c22cd084..655fe1446 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facade/expenseAccount/ExpenseAccountApi.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facade/expenseAccount/ExpenseAccountApi.java
@@ -1,5 +1,7 @@
package com.mhd.basic.interfaces.facade.expenseAccount;
+import java.io.IOException;
+import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
@@ -13,9 +15,11 @@ import com.mhd.basic.domain.expenseAccount.repository.todo.SearchExpenseAccountD
import com.mhd.basic.domain.sysMultistageDict.repository.po.SysMultistageDictPo;
import com.mhd.basic.interfaces.assember.expenseAccount.ExpenseAccountAssembler;
import com.mhd.basic.interfaces.dto.expenseAccount.ExpenseAccountDTO;
+import com.mhd.basic.interfaces.dto.expenseAccount.ExpenseAccountExportVO;
import com.mhd.basic.interfaces.dto.expenseAccount.SearchExpenseAccountDTO;
import com.mhd.common.core.constant.HttpStatus;
import com.mhd.common.core.domain.entity.R;
+import com.mhd.common.core.utils.poi.ExcelUtil;
import com.sun.org.apache.bcel.internal.generic.NEW;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang.StringUtils;
@@ -26,6 +30,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
import com.mhd.common.core.web.controller.BaseController;
import com.mhd.common.core.web.domain.AjaxResult;
import com.mhd.common.core.web.page.TableDataInfo;
@@ -336,5 +341,45 @@ public class ExpenseAccountApi extends BaseController{
return AjaxResult.success(expenseAccountPO.getUnit());
}
+ /**
+ * 复制费用科目
+ * 返回原科目数据(已清空主键、科目编码等字段)供前端回显到新增弹窗,用户填写新科目编码后通过 /edit 接口提交新增
+ */
+ @ApiOperation("复制费用科目-获取原科目数据用于回显")
+ @PostMapping("/copy")
+ public AjaxResult copy(@RequestBody ExpenseAccountDTO expenseAccountDTO)
+ {
+ try {
+ ExpenseAccountPO expenseAccountPO = expenseAccountApplicationService.copy(expenseAccountDTO);
+ return AjaxResult.success(expenseAccountPO);
+ }catch (Exception e){
+ return AjaxResult.error(e.getMessage());
+ }
+ }
+
+ /**
+ * 导出费用科目
+ * 按列表页当前查询条件 + 数据权限过滤,不分页全量导出
+ */
+ @ApiOperation("导出费用科目")
+ @RequestMapping(value = "/export", method = {RequestMethod.GET, RequestMethod.POST},
+ produces = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
+ public void export(ExpenseAccountDTO expenseAccountDTO, HttpServletResponse response) throws IOException
+ {
+ //转换实体(不用Assembler,避免其自动填充createByName/updateByName干扰查询条件,与/list一致)
+ ExpenseAccountDO expenseAccountDO = new ExpenseAccountDO();
+ BeanUtils.copyProperties(expenseAccountDTO, expenseAccountDO);
+ //查询全量(不分页),并转换为导出对象
+ List list = expenseAccountApplicationService.buildExportList(expenseAccountDO);
+
+ //设置下载头,防止浏览器乱码
+ 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<>(ExpenseAccountExportVO.class);
+ util.exportExcel(response, list, "费用科目");
+ }
}
\ No newline at end of file
From afa502eeafc817ef7c53db90ebe8801b903596f5 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Fri, 28 Aug 2026 09:14:03 +0800
Subject: [PATCH 07/87] =?UTF-8?q?feat(system):=E4=BB=93=E5=BA=93=E7=AE=A1?=
=?UTF-8?q?=E7=90=86-=E5=BA=93=E4=BD=8D=E7=AE=A1=E7=90=86=E6=96=B0?=
=?UTF-8?q?=E5=A2=9E=E5=A4=8D=E5=88=B6=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
需求:库位管理列表增加复制功能,快速复用已有库位配置新建库位。
实现(仿照bms复制账单copyBill的回显式复制):
一、新增接口 POST /storageLocationApi/copyStorageLocation(StorageLocationApi):
id判空+try-catch兜底,异常返回"复制库单失败:xxx"
二、StorageLocationApplicationService新增copyStorageLocation:
取原库位PO后清空唯一性字段(storageLocationId不清空会误走修改分支覆盖原库位、
storageLocationCode同组织同仓库唯一须用户重填、locationBarCode物理唯一)、
清空审计字段(提交时Assembler按登录人重写)、状态重置初始值
(status=1空/openingUp=1启用/nullify=1未作废);其余业务字段保留回显
三、前端拿PO回显到新增页,用户改编码后走现有edit接口(id为空即新增)提交,
天然复用编码唯一性校验、仓库/库区/库位组回填、库位组计数+1,Domain层零改动
---
.../StorageLocationApplicationService.java | 34 +++++++++++++++++++
.../storageLocation/StorageLocationApi.java | 19 +++++++++++
2 files changed, 53 insertions(+)
diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageLocation/StorageLocationApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageLocation/StorageLocationApplicationService.java
index 566c37e41..7bd6df9fa 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageLocation/StorageLocationApplicationService.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/storageLocation/StorageLocationApplicationService.java
@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSON;
import com.mhd.basic.domain.storageLocation.repository.po.StorageLocationPO;
import com.mhd.basic.domain.storageLocation.repository.todo.StorageLocationDO;
import com.mhd.basic.domain.storageLocation.service.StorageLocationDomainService;
+import com.mhd.basic.interfaces.dto.storageLocation.StorageLocationDTO;
import com.mhd.basic.domain.storageSection.repository.todo.StorageSectionDO;
import com.mhd.basic.infrastructure.feign.vo.SysDictDataVo;
import com.mhd.common.core.domain.po.UserPo;
@@ -207,6 +208,39 @@ public class StorageLocationApplicationService {
return storageLocationDomainService.getInfo(storageLocationId);
}
+ /**
+ * 复制库位-获取原库位数据供前端回显
+ * 前端拿到数据后跳转到新增库位页面,用户修改编码后通过edit接口提交新增
+ */
+ public StorageLocationPO copyStorageLocation(StorageLocationDTO storageLocationDTO) {
+ if (storageLocationDTO.getStorageLocationId() == null) {
+ throw new ServiceException("原库位id不能为空");
+ }
+ // 获取原库位信息
+ StorageLocationPO originalStorageLocation = storageLocationDomainService.getInfo(storageLocationDTO.getStorageLocationId());
+ if (null == originalStorageLocation) {
+ throw new ServiceException("原库位信息未找到");
+ }
+ // 清空唯一性字段:库位id不清空会导致提交后走修改分支覆盖原库位;
+ // 库位编码同组织同仓库唯一,须由用户重新填写;条码为物理唯一标识,一并清空
+ originalStorageLocation.setStorageLocationId(null);
+ originalStorageLocation.setStorageLocationCode(null);
+ originalStorageLocation.setLocationBarCode(null);
+ // 状态重置为初始值:新库位无库存(空)、启用、未作废
+ originalStorageLocation.setStatus(1);
+ originalStorageLocation.setOpeningUp(1);
+ originalStorageLocation.setNullify(1);
+ // 清空审计字段,提交新增时由Assembler按当前登录人重新生成
+ originalStorageLocation.setCreateBy(null);
+ originalStorageLocation.setCreateByName(null);
+ originalStorageLocation.setCreateTime(null);
+ originalStorageLocation.setUpdateBy(null);
+ originalStorageLocation.setUpdateByName(null);
+ originalStorageLocation.setUpdateTime(null);
+ // 其余业务字段(仓库/库区/库位组、分类/种类/混放策略、限制、长宽高、坐标、备注)保留回显
+ return originalStorageLocation;
+ }
+
public int getStorageLocationCount(StorageLocationDO storageLocationDO)
{
return storageLocationDomainService.getStorageLocationCount(storageLocationDO);
diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facadeApi/storageLocation/StorageLocationApi.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facadeApi/storageLocation/StorageLocationApi.java
index 6f071de45..2c211ae5d 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facadeApi/storageLocation/StorageLocationApi.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facadeApi/storageLocation/StorageLocationApi.java
@@ -19,6 +19,7 @@ import com.mhd.basic.domain.storageLocation.repository.todo.StorageLocationDO;
import com.mhd.basic.domain.storageLocation.repository.po.StorageLocationPO;
import com.mhd.basic.application.service.storageLocation.StorageLocationApplicationService;
import com.mhd.basic.interfaces.assember.storageLocation.StorageLocationAssembler;
+import com.mhd.common.core.exception.ServiceException;
import javax.annotation.Resource;
import com.mhd.common.core.web.controller.BaseController;
import com.mhd.common.core.web.domain.AjaxResult;
@@ -127,6 +128,24 @@ public class StorageLocationApi extends BaseController{
{
return AjaxResult.success(storageLocationApplicationService.getInfo(storageLocationId));
}
+
+ /**
+ * 复制库位-获取原库位数据用于回显
+ */
+ @ApiOperation("复制库位-获取原库位数据用于回显")
+ @PostMapping("/copyStorageLocation")
+ public AjaxResult copyStorageLocation(@RequestBody StorageLocationDTO storageLocationDTO)
+ {
+ if(storageLocationDTO.getStorageLocationId() == null){
+ throw new ServiceException("原库位id不能为空");
+ }
+ try {
+ StorageLocationPO result = storageLocationApplicationService.copyStorageLocation(storageLocationDTO);
+ return AjaxResult.success(result);
+ }catch (Exception e){
+ return AjaxResult.error("复制库位失败:"+e.getMessage());
+ }
+ }
@ApiOperation("获取库位总数")
@PostMapping(value = "/getStorageLocationCount")
public AjaxResult getStorageLocationCount(@RequestBody StorageLocationDTO storageLocationDTO)
From 6349181cc304c6a89aabe6599480f09a8d50b15d Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Fri, 28 Aug 2026 09:20:11 +0800
Subject: [PATCH 08/87] =?UTF-8?q?feat(sys):=E8=B4=B9=E7=94=A8=E7=A7=91?=
=?UTF-8?q?=E7=9B=AE=E5=AF=BC=E5=87=BA=E5=A2=9E=E5=8A=A0=E6=96=B0vo?=
=?UTF-8?q?=E5=AF=B9=E8=B1=A1=20=E6=96=B0=E5=A2=9E=20ExpenseAccountExportV?=
=?UTF-8?q?O=20=E5=AF=BC=E5=87=BA=E5=AF=B9=E8=B1=A1=EF=BC=8827=E5=88=97?=
=?UTF-8?q?=E4=B8=9A=E5=8A=A1=E5=AD=97=E6=AE=B5=EF=BC=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ExpenseAccountExportVO.java | 98 +++++++++++++++++++
1 file changed, 98 insertions(+)
create mode 100644 mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/expenseAccount/ExpenseAccountExportVO.java
diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/expenseAccount/ExpenseAccountExportVO.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/expenseAccount/ExpenseAccountExportVO.java
new file mode 100644
index 000000000..a7d59ebaf
--- /dev/null
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/expenseAccount/ExpenseAccountExportVO.java
@@ -0,0 +1,98 @@
+package com.mhd.basic.interfaces.dto.expenseAccount;
+
+import com.mhd.common.core.annotation.Excel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 费用科目导出对象 expense_account
+ *
+ * @author rcx
+ * @date 2026-08-28
+ */
+@Data
+public class ExpenseAccountExportVO {
+
+ @Excel(name = "组织名称")
+ private String organizationName;
+
+ @Excel(name = "科目编码")
+ private String subjectCode;
+
+ @Excel(name = "科目名称")
+ private String subjectName;
+
+ @Excel(name = "显示顺序")
+ private Integer showSeq;
+
+ @Excel(name = "计费属性")
+ private String billingAttributes;
+
+ @Excel(name = "所属模块")
+ private String belongModule;
+
+ @Excel(name = "是否一级科目", readConverterExp = "1=是,2=否")
+ private Integer firstSubjectFlag;
+
+ @Excel(name = "上级科目编码")
+ private String upperSubjectCode;
+
+ @Excel(name = "上级科目名称")
+ private String upperSubject;
+
+ @Excel(name = "科目类型", readConverterExp = "1=系统科目,2=非系统科目")
+ private Integer accountType;
+
+ @Excel(name = "收支类型", readConverterExp = "1=收入,2=支出")
+ private Integer accountExpenseType;
+
+ @Excel(name = "服务项编码")
+ private String serviceItemsCode;
+
+ @Excel(name = "服务项名称")
+ private String serviceItemsName;
+
+ @Excel(name = "服务项税率")
+ private BigDecimal taxRate;
+
+ @Excel(name = "费率")
+ private BigDecimal rate;
+
+ @Excel(name = "启用状态", readConverterExp = "1=启用,2=停用")
+ private Integer status;
+
+ @Excel(name = "自有车辆固定显示", readConverterExp = "1=是,2=否")
+ private Integer ownStatus;
+
+ @Excel(name = "社会车辆固定显示", readConverterExp = "1=是,2=否")
+ private Integer societyStatus;
+
+ @Excel(name = "创建订单固定显示", readConverterExp = "0=否,1=是")
+ private Integer fixedOrderDisplay;
+
+ @Excel(name = "入库单固定显示", readConverterExp = "0=否,1=是")
+ private Integer inOrderDisplay;
+
+ @Excel(name = "出库单固定显示", readConverterExp = "0=否,1=是")
+ private Integer outOrderDisplay;
+
+ @Excel(name = "计费单位")
+ private String billingUnit;
+
+ @Excel(name = "计费单位2")
+ private String billingUnit2;
+
+ @Excel(name = "NC科目编码")
+ private String ncSubjectCode;
+
+ @Excel(name = "备注")
+ private String remark;
+
+ @Excel(name = "创建人")
+ private String createByName;
+
+ @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+}
From d0773a40d2461dd0c988c474322c2c014e651bf9 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Fri, 28 Aug 2026 16:12:56 +0800
Subject: [PATCH 09/87] =?UTF-8?q?feat(transport):=E5=9F=BA=E7=A1=80?=
=?UTF-8?q?=E6=95=B0=E6=8D=AE-=E8=BF=90=E8=90=A5=E6=95=B0=E6=8D=AE-?=
=?UTF-8?q?=E8=BD=A6=E8=BE=86=E7=AE=A1=E7=90=86=E5=A2=9E=E5=8A=A0=E5=AF=BC?=
=?UTF-8?q?=E5=87=BA=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
新增 /vehicle/export 导出接口(GET/POST,兼容前端 download 工具),
复用列表查询条件与数据权限,不分页导出全量数据为 xlsx;
新增 VehicleExportVO 导出对象(40列,状态字段转中文)。
---
.../vehicle/VehicleApplicationService.java | 28 +++
.../dto/vehicle/VehicleExportVO.java | 178 ++++++++++++++++++
.../interfaces/facade/vehicle/VehicleApi.java | 32 ++++
3 files changed, 238 insertions(+)
create mode 100644 mhd_transport/src/main/java/com/linke/transport/interfaces/dto/vehicle/VehicleExportVO.java
diff --git a/mhd_transport/src/main/java/com/linke/transport/application/service/vehicle/VehicleApplicationService.java b/mhd_transport/src/main/java/com/linke/transport/application/service/vehicle/VehicleApplicationService.java
index b3e4d2147..5f306f16d 100644
--- a/mhd_transport/src/main/java/com/linke/transport/application/service/vehicle/VehicleApplicationService.java
+++ b/mhd_transport/src/main/java/com/linke/transport/application/service/vehicle/VehicleApplicationService.java
@@ -32,6 +32,7 @@ import com.linke.transport.interfaces.assemble.vehicle.VehicleAssembler;
import com.mhd.common.core.constant.Constants;
import com.mhd.common.core.domain.dto.SyncTmsVehicleDTO;
import com.linke.transport.interfaces.dto.vehicle.VehicleDto;
+import com.linke.transport.interfaces.dto.vehicle.VehicleExportVO;
import com.mhd.common.core.annotation.fieldsetvalue.NeedSetValueField;
import com.mhd.common.core.annotation.fieldsetvalue.NeedSetValueMethod;
import com.mhd.common.core.constant.NoticeConstants;
@@ -238,6 +239,33 @@ public class VehicleApplicationService {
return vehiclePos;
}
+ /**
+ * 构建车辆管理导出数据(不分页,按列表查询条件导出)
+ *
+ * @param vehiclePo 查询条件
+ * @param dataPermission 数据权限
+ * @return 导出数据
+ */
+ public List buildExportList(VehiclePo vehiclePo, DataPermission dataPermission) {
+ List vehiclePos = selectVehicleList(vehiclePo, dataPermission);
+ List exportList = new ArrayList<>();
+ if (CollUtil.isEmpty(vehiclePos)) {
+ return exportList;
+ }
+ for (VehiclePo po : vehiclePos) {
+ VehicleExportVO vo = new VehicleExportVO();
+ BeanUtils.copyProperties(po, vo);
+ // 司机名称集合拼接为字符串(List与String类型不匹配,copyProperties不会复制,需手动设置)
+ if (CollUtil.isNotEmpty(po.getDriverNames())) {
+ vo.setDriverNames(String.join(",", po.getDriverNames()));
+ }
+ // 所属组织与归属组织一致
+ vo.setBelongOrganizationName(po.getOrganizationName());
+ exportList.add(vo);
+ }
+ return exportList;
+ }
+
/**
* 查询未绑定车辆列表
*
diff --git a/mhd_transport/src/main/java/com/linke/transport/interfaces/dto/vehicle/VehicleExportVO.java b/mhd_transport/src/main/java/com/linke/transport/interfaces/dto/vehicle/VehicleExportVO.java
new file mode 100644
index 000000000..b98554e7c
--- /dev/null
+++ b/mhd_transport/src/main/java/com/linke/transport/interfaces/dto/vehicle/VehicleExportVO.java
@@ -0,0 +1,178 @@
+package com.linke.transport.interfaces.dto.vehicle;
+
+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;
+import java.util.Date;
+
+/**
+ * 车辆管理导出对象(基础数据-运营数据-车辆管理列表,列顺序与页面列表一致)
+ *
+ * @author gen
+ */
+@Data
+@ApiModel(value = "车辆管理导出对象", description = "车辆管理导出对象")
+public class VehicleExportVO implements Serializable
+{
+ private static final long serialVersionUID = 1L;
+
+ @Excel(name = "车辆主体", readConverterExp = "1=主车,2=挂车")
+ @ApiModelProperty(name = "车辆主体(1-主车,2-挂车)")
+ private Integer vehicleBody;
+
+ @Excel(name = "车牌号码")
+ @ApiModelProperty(name = "车牌号码")
+ private String vehicleLicensePlateNumber;
+
+ @Excel(name = "跨境车牌")
+ @ApiModelProperty(name = "跨境车牌")
+ private String crossPlate;
+
+ @Excel(name = "车辆类型")
+ @ApiModelProperty(name = "车辆类型")
+ private String vehicleTypeName;
+
+ @Excel(name = "类型", readConverterExp = "0=自由车辆,1=社会车辆")
+ @ApiModelProperty(name = "类型(车辆来源)")
+ private Integer vehicleSource;
+
+ @Excel(name = "部门")
+ @ApiModelProperty(name = "部门")
+ private String departmentName;
+
+ @Excel(name = "车辆认证", readConverterExp = "0=无状态,1=未认证,2=等待审核,3=已通过,4=已驳回")
+ @ApiModelProperty(name = "车辆认证状态")
+ private Integer authenticationStatus;
+
+ @Excel(name = "司机姓名")
+ @ApiModelProperty(name = "司机姓名(多个以逗号分隔)")
+ private String driverNames;
+
+ @Excel(name = "副驾1")
+ @ApiModelProperty(name = "副驾1")
+ private String pilot1;
+
+ @Excel(name = "副驾2")
+ @ApiModelProperty(name = "副驾2")
+ private String pilot2;
+
+ @Excel(name = "车队名称")
+ @ApiModelProperty(name = "车队名称")
+ private String motorcadeName;
+
+ @Excel(name = "年检有效期", width = 20, dateFormat = "yyyy-MM-dd")
+ @ApiModelProperty(name = "年检有效期")
+ private Date annualValidityPeriod;
+
+ @Excel(name = "保险有效期", width = 20, dateFormat = "yyyy-MM-dd")
+ @ApiModelProperty(name = "保险有效期")
+ private Date insuranceValidityPeriod;
+
+ @Excel(name = "运载状态", readConverterExp = "0=无状态,1=空载,2=负载")
+ @ApiModelProperty(name = "运载状态")
+ private Integer carryStatus;
+
+ @Excel(name = "使用性质")
+ @ApiModelProperty(name = "使用性质")
+ private String vehicleUseNature;
+
+ @Excel(name = "总质量(kg)")
+ @ApiModelProperty(name = "总质量(kg)")
+ private BigDecimal vehicleTotalMass;
+
+ @Excel(name = "核定载质量(kg)")
+ @ApiModelProperty(name = "核定载质量(kg)")
+ private BigDecimal vehicleApprovedLoadQuantity;
+
+ @Excel(name = "车轴数")
+ @ApiModelProperty(name = "车轴数")
+ private String otherAxlesNumberName;
+
+ @Excel(name = "车长(米)")
+ @ApiModelProperty(name = "车长(米)")
+ private String otherCarLengthName;
+
+ @Excel(name = "容积(方)")
+ @ApiModelProperty(name = "容积(方)")
+ private String otherVehicleVolumeName;
+
+ @Excel(name = "车牌颜色")
+ @ApiModelProperty(name = "车牌颜色")
+ private String otherLicensePlateColorName;
+
+ @Excel(name = "行驶证有效期限", width = 20, dateFormat = "yyyy-MM-dd")
+ @ApiModelProperty(name = "行驶证有效期限")
+ private Date vehicleCheckoutPeriodValidity;
+
+ @Excel(name = "道路运输证号")
+ @ApiModelProperty(name = "道路运输证号")
+ private String roadTransportCertificateNo;
+
+ @Excel(name = "道路运输证有效期限", width = 20, dateFormat = "yyyy-MM-dd")
+ @ApiModelProperty(name = "道路运输证有效期限")
+ private Date roadTransportCertificateExpireDate;
+
+ @Excel(name = "道路运输证校验状态", readConverterExp = "0=无状态,1=未核验,2=核验通过,3=核验失败")
+ @ApiModelProperty(name = "道路运输证校验状态")
+ private Integer roadTransportCertificateCheckoutStatus;
+
+ @Excel(name = "经营许可证号")
+ @ApiModelProperty(name = "经营许可证号")
+ private String businessLicenseNumber;
+
+ @Excel(name = "经营许可证业户名称")
+ @ApiModelProperty(name = "经营许可证业户名称")
+ private String specializedHouseholdsName;
+
+ @Excel(name = "道路运输经营许可证有效期", width = 20, dateFormat = "yyyy-MM-dd")
+ @ApiModelProperty(name = "道路运输经营许可证有效期(截止日期)")
+ private Date businessLicenseExpireEndDate;
+
+ @Excel(name = "经营许可证校验状态", readConverterExp = "0=无状态,1=未核验,2=核验通过,3=核验失败")
+ @ApiModelProperty(name = "经营许可证校验状态")
+ private Integer businessLicenseCheckoutStatus;
+
+ @Excel(name = "入网校验状态", readConverterExp = "0=无状态,1=未核验,2=已入网,3=未入网")
+ @ApiModelProperty(name = "入网校验状态")
+ private Integer netInStatus;
+
+ @Excel(name = "入网查询时间", width = 20, dateFormat = "yyyy-MM-dd")
+ @ApiModelProperty(name = "入网查询时间")
+ private Date netInDate;
+
+ @Excel(name = "使用状态", readConverterExp = "0=无状态,1=正常,2=黑名单")
+ @ApiModelProperty(name = "使用状态")
+ private Integer useStatus;
+
+ @Excel(name = "归属组织")
+ @ApiModelProperty(name = "归属组织")
+ private String organizationName;
+
+ @Excel(name = "添加人员")
+ @ApiModelProperty(name = "添加人员")
+ private String createByName;
+
+ @Excel(name = "添加时间", width = 25, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ @ApiModelProperty(name = "添加时间")
+ private Date createTime;
+
+ @Excel(name = "审核人员")
+ @ApiModelProperty(name = "审核人员")
+ private String checkoutPersonName;
+
+ @Excel(name = "审核时间", width = 20, dateFormat = "yyyy-MM-dd")
+ @ApiModelProperty(name = "审核时间")
+ private Date checkoutDate;
+
+ @Excel(name = "更新时间", width = 25, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ @ApiModelProperty(name = "更新时间")
+ private Date updateTime;
+
+ @Excel(name = "所属组织")
+ @ApiModelProperty(name = "所属组织(与归属组织一致)")
+ private String belongOrganizationName;
+}
diff --git a/mhd_transport/src/main/java/com/linke/transport/interfaces/facade/vehicle/VehicleApi.java b/mhd_transport/src/main/java/com/linke/transport/interfaces/facade/vehicle/VehicleApi.java
index 661c393d5..cbd1f33b7 100644
--- a/mhd_transport/src/main/java/com/linke/transport/interfaces/facade/vehicle/VehicleApi.java
+++ b/mhd_transport/src/main/java/com/linke/transport/interfaces/facade/vehicle/VehicleApi.java
@@ -9,6 +9,7 @@ import com.linke.transport.domain.vehicle.repository.po.VehiclePo;
import com.linke.transport.interfaces.assemble.vehicle.VehicleAssembler;
import com.mhd.common.core.domain.dto.SyncTmsVehicleDTO;
import com.linke.transport.interfaces.dto.vehicle.VehicleDto;
+import com.linke.transport.interfaces.dto.vehicle.VehicleExportVO;
import com.mhd.common.core.domain.dto.StatisticalMattersDTO;
import com.mhd.common.core.domain.entity.R;
import com.mhd.common.core.domain.todo.StatisticalMattersDo;
@@ -16,6 +17,7 @@ import com.mhd.common.core.exception.ServiceException;
import com.mhd.common.core.exception.digitalLogisticsException.DigitalLogisticsException;
import com.mhd.common.core.utils.IgnoreNullUtil;
import com.mhd.common.core.utils.bean.BeanUtils;
+import com.mhd.common.core.utils.poi.ExcelUtil;
import com.mhd.common.core.web.controller.BaseController;
import com.mhd.common.core.web.domain.AjaxResult;
import com.mhd.common.core.web.page.TableDataInfo;
@@ -28,6 +30,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
import java.util.List;
/**
@@ -65,6 +70,33 @@ public class VehicleApi extends BaseController
return getDataTable(list);
}
+ /**
+ * 导出车辆管理列表
+ */
+ @Log(title = "车辆管理-导出", description = "导出车辆管理列表", businessType = BusinessType.EXPORT)
+ @ApiOperation("导出车辆管理列表")
+ // 同时支持 GET(query 参数)与 POST(form 表单,兼容前端 this.download() 工具)
+ @RequestMapping(value = "/export", method = {RequestMethod.GET, RequestMethod.POST}, produces = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
+ public void export(VehicleDto vehicleDto, HttpServletResponse response) throws IOException
+ {
+ VehiclePo vehiclePo = new VehiclePo();
+ //转换实体
+ BeanUtils.copyProperties(vehicleDto, vehiclePo);
+ //判断当前登录人数据权限
+ DataPermission dataPermission = commonApplicationService.dataPermission(vehiclePo.getPermissionMenuId());
+ //查询全量(不分页)
+ List list = vehicleApplicationService.buildExportList(vehiclePo, dataPermission);
+
+ //设置下载头,防止浏览器乱码
+ 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<>(VehicleExportVO.class);
+ util.exportExcel(response, list, "车辆管理数据");
+ }
+
/**
* 车辆绑定副驾
*/
From 7a01315ca8510bffca30199219f88d02a9f86d58 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Fri, 28 Aug 2026 16:17:48 +0800
Subject: [PATCH 10/87] =?UTF-8?q?feat(sys)=EF=BC=9A=E5=AF=BC=E5=87=BA?=
=?UTF-8?q?=E5=AD=97=E6=AE=B5=E4=BC=98=E5=8C=96=E4=B8=8E=E5=89=8D=E7=AB=AF?=
=?UTF-8?q?=E6=98=BE=E7=A4=BA=E4=BF=9D=E6=8C=81=E4=B8=80=E8=87=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ExpenseAccountExportVO.java | 93 +++++++------------
1 file changed, 32 insertions(+), 61 deletions(-)
diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/expenseAccount/ExpenseAccountExportVO.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/expenseAccount/ExpenseAccountExportVO.java
index a7d59ebaf..31f09e3fc 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/expenseAccount/ExpenseAccountExportVO.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/dto/expenseAccount/ExpenseAccountExportVO.java
@@ -15,53 +15,30 @@ import java.util.Date;
@Data
public class ExpenseAccountExportVO {
- @Excel(name = "组织名称")
- private String organizationName;
-
- @Excel(name = "科目编码")
- private String subjectCode;
-
- @Excel(name = "科目名称")
- private String subjectName;
-
- @Excel(name = "显示顺序")
- private Integer showSeq;
-
- @Excel(name = "计费属性")
- private String billingAttributes;
-
- @Excel(name = "所属模块")
- private String belongModule;
-
- @Excel(name = "是否一级科目", readConverterExp = "1=是,2=否")
- private Integer firstSubjectFlag;
-
- @Excel(name = "上级科目编码")
- private String upperSubjectCode;
-
- @Excel(name = "上级科目名称")
- private String upperSubject;
-
- @Excel(name = "科目类型", readConverterExp = "1=系统科目,2=非系统科目")
- private Integer accountType;
-
- @Excel(name = "收支类型", readConverterExp = "1=收入,2=支出")
- private Integer accountExpenseType;
-
- @Excel(name = "服务项编码")
- private String serviceItemsCode;
-
- @Excel(name = "服务项名称")
+ /** 费用类别(关联服务项名称) */
+ @Excel(name = "费用类别")
private String serviceItemsName;
- @Excel(name = "服务项税率")
+ @Excel(name = "上级科目")
+ private String upperSubject;
+
+ @Excel(name = "费用代码")
+ private String subjectCode;
+
+ @Excel(name = "费用名称")
+ private String subjectName;
+
+ @Excel(name = "税率")
private BigDecimal taxRate;
- @Excel(name = "费率")
- private BigDecimal rate;
+ @Excel(name = "创建订单固定显示", readConverterExp = "0=否,1=是")
+ private Integer fixedOrderDisplay;
- @Excel(name = "启用状态", readConverterExp = "1=启用,2=停用")
- private Integer status;
+ @Excel(name = "入库显示", readConverterExp = "0=否,1=是")
+ private Integer inOrderDisplay;
+
+ @Excel(name = "出库显示", readConverterExp = "0=否,1=是")
+ private Integer outOrderDisplay;
@Excel(name = "自有车辆固定显示", readConverterExp = "1=是,2=否")
private Integer ownStatus;
@@ -69,30 +46,24 @@ public class ExpenseAccountExportVO {
@Excel(name = "社会车辆固定显示", readConverterExp = "1=是,2=否")
private Integer societyStatus;
- @Excel(name = "创建订单固定显示", readConverterExp = "0=否,1=是")
- private Integer fixedOrderDisplay;
-
- @Excel(name = "入库单固定显示", readConverterExp = "0=否,1=是")
- private Integer inOrderDisplay;
-
- @Excel(name = "出库单固定显示", readConverterExp = "0=否,1=是")
- private Integer outOrderDisplay;
-
- @Excel(name = "计费单位")
- private String billingUnit;
-
- @Excel(name = "计费单位2")
- private String billingUnit2;
-
- @Excel(name = "NC科目编码")
- private String ncSubjectCode;
-
- @Excel(name = "备注")
+ @Excel(name = "备注信息")
private String remark;
+ @Excel(name = "状态", readConverterExp = "1=启用,2=停用")
+ private Integer status;
+
@Excel(name = "创建人")
private String createByName;
@Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
+
+ @Excel(name = "更新人")
+ private String updateByName;
+
+ @Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ private Date updateTime;
+
+ @Excel(name = "所属组织")
+ private String organizationName;
}
From 06cf5ce8619b8ff3e8a8dd5974d191eea09834de Mon Sep 17 00:00:00 2001
From: zhaoqing <3160641494@qq.com>
Date: Fri, 28 Aug 2026 16:22:28 +0800
Subject: [PATCH 11/87] =?UTF-8?q?fix(oms):=E6=98=8E=E7=BB=86=E8=A1=A8?=
=?UTF-8?q?=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../po/ExecutionOutMaterialDetailWithOrderPO.java | 7 +++++++
.../ExecutionOutMaterialDetailMapper.xml | 4 ++++
2 files changed, 11 insertions(+)
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/executionOutMaterialDetail/repository/po/ExecutionOutMaterialDetailWithOrderPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/executionOutMaterialDetail/repository/po/ExecutionOutMaterialDetailWithOrderPO.java
index 6cc1c9823..8534f26b5 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/executionOutMaterialDetail/repository/po/ExecutionOutMaterialDetailWithOrderPO.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/executionOutMaterialDetail/repository/po/ExecutionOutMaterialDetailWithOrderPO.java
@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
+import java.math.BigDecimal;
import java.util.Date;
/**
@@ -41,4 +42,10 @@ public class ExecutionOutMaterialDetailWithOrderPO extends ExecutionOutMaterialD
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date orderOutboundTime;
+
+ @ApiModelProperty("保额")
+ private BigDecimal insureAmount;
+
+ @ApiModelProperty("货物类型:0-物料 1-半成品 2-成品")
+ private Integer goodsType;
}
diff --git a/mhd_oms/src/main/resources/mapper/executionOutMaterialDetail/ExecutionOutMaterialDetailMapper.xml b/mhd_oms/src/main/resources/mapper/executionOutMaterialDetail/ExecutionOutMaterialDetailMapper.xml
index 8fd4090a8..6f7068f7a 100644
--- a/mhd_oms/src/main/resources/mapper/executionOutMaterialDetail/ExecutionOutMaterialDetailMapper.xml
+++ b/mhd_oms/src/main/resources/mapper/executionOutMaterialDetail/ExecutionOutMaterialDetailMapper.xml
@@ -459,6 +459,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+
+
- group by a.MATERIAL_INVENTORY_ID order by a.update_time desc
+ group by a.MATERIAL_INVENTORY_ID order by a.update_time desc
@@ -306,6 +315,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
GROUP BY a.MATERIAL_BASE_INFO_ID,a.WAREHOUSE_ID,a.STORAGE_SECTION_ID,a.STORAGE_LOCATION_ID
+
@@ -319,6 +329,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
GROUP BY a.WAREHOUSE_ID,a.STORAGE_SECTION_ID,a.STORAGE_LOCATION_ID
+
@@ -332,6 +343,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
GROUP BY a.MATERIAL_BASE_INFO_ID
+
@@ -369,6 +381,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
GROUP BY a.MATERIAL_BASE_INFO_ID, a.EXPIRY_DATE, a.shipper_id, a.shipper_code, a.shipper_name,
a.organization_id, a.organization_name, a.top_organization_id,
b.material_code, b.material_name
+
@@ -394,6 +407,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
GROUP BY a.SHIPPER_ID
+
From 2d1e4b5912355a42d51eca45f21be8648d7e08bf Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Mon, 31 Aug 2026 11:15:41 +0800
Subject: [PATCH 18/87] =?UTF-8?q?feat(oms):=E5=87=BA=E5=85=A5=E5=BA=93?=
=?UTF-8?q?=E5=AF=BC=E5=85=A5=E6=8C=89=E7=BC=96=E5=8F=B7=E8=87=AA=E5=8A=A8?=
=?UTF-8?q?=E5=8C=B9=E9=85=8D=E5=90=8D=E7=A7=B0=E5=B9=B6=E6=A0=A1=E9=AA=8C?=
=?UTF-8?q?=E5=AE=A2=E6=88=B7/=E7=89=A9=E6=96=99=E5=AD=98=E5=9C=A8?=
=?UTF-8?q?=E6=80=A7=EF=BC=8C=E6=A8=A1=E6=9D=BF=E5=88=97=E4=BD=8D=E6=94=B9?=
=?UTF-8?q?=E4=B8=BA=E5=8A=A8=E6=80=81=E8=AF=86=E5=88=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
需求:①入库业务单导入模板只填物料编号+客户编号,物料名称/客户名称按编号自动匹配库中数据
②③出库导入校验客户/物料是否已存在,不存在提示"进行维护" ④库中查询结果为空(确无数据)时报错
一、入库导入(ReservationStockInOrderImpl.parseStockInExcel):
1. 物料逐编号查库,缺失料号收集后一次性报错"物料[xx]不存在,请先维护物料信息后再导入"
2. 明细新增客户编号:去重后查库,为空报错"客户[编号]不存在,请先维护客户信息后再导入";
查到则以该客户为单据货主并自动匹配名称;与物料归属货主不一致时拦截并提示两者编号
3. 明细回填库中物料名称;未填客户编号时维持原"货主取自物料"逻辑,兼容老模板
二、出库导入(parseExcelFile):
1. 物料/客户校验前移到落库前(原为先落库后查客户,报错会留半截数据)
2. 物料查不到收集后报错维护提示;客户查不到报错维护提示,客户ID/名称改取库中匹配值
(替换仅返回id且查不到时静默存null的queryShipperId)
3. 產品編號/客户編号漏填的行直接报错提示补全
三、模板解析改为按列头文字动态定位列(繁简体归一化),列/行顺序调整不影响解析,
识别不到时回落老模板固定列位,老模板行为不变:
1. StockInExcelListener(入库):以產品編號为锚点识别列头行,新增客戶編號列支持
2. DynamicDeliveryExcelListener(出库):左右分栏各自锚点识别;送货日期/线号/车次/
发票张数/小计/纪录合共改按标签文字定位,行号列号不再写死
四、Mapper:ReservationStockOutOrderMapper新增queryCustomerByCode(按组织查询,
USER_MEMBER_CODE或USER_SHIPPER.CUSTOMER_NC_CODE任一命中),删除queryShipperId
---
.../DynamicDeliveryExcelListener.java | 517 ++++++++++++------
.../listener/StockInExcelListener.java | 246 +++++++--
.../ReservationStockInOrderImpl.java | 184 +++++--
.../repository/vo/StockInHeader.java | 20 +
.../repository/vo/StockInProductDetail.java | 14 +-
.../ReservationStockOutOrderMapper.java | 8 +-
.../ReservationStockOutOrderMapper.xml | 12 +-
7 files changed, 751 insertions(+), 250 deletions(-)
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/listener/DynamicDeliveryExcelListener.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/listener/DynamicDeliveryExcelListener.java
index 9b898afb5..07ae79d33 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/listener/DynamicDeliveryExcelListener.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/listener/DynamicDeliveryExcelListener.java
@@ -21,20 +21,47 @@ import java.util.Map;
/**
* 维他奶出库Excel解析监听器(新模板版)
* 新模板特点:货品明细与客户配送明细左右分栏展示
- * 核心功能:
- * 1. 左侧栏:第1-3行解析表头(送货日期/送货线号/车次),第5行解析纪录合共,第7行起解析货品明细
- * 2. 右侧栏:第2行解析发票张数/小计,第4行起解析客户配送明细
- * 3. 自动处理文本型数字转换(String→Integer/BigDecimal)
- * 4. 完整的异常处理和日志记录
+ * 核心功能(行列位置均不写死,模板调整行/列顺序不影响解析):
+ * 1. 表头标签(送货日期/送货线号/车次/发票张数/小计/纪录合共):按标签文字定位标签所在列,取右侧相邻列的值
+ * 2. 货品明细:按列头文字(貨品編號/簡稱/箱/支等,繁简体归一化)定位各列,列头行之后的行按数据解析
+ * 3. 客户配送明细:按列头文字(類别/發票編號/客户編號/名稱/箱/包/金額等)定位各列
+ * 4. 列头行识别失败时兜底:按老模板固定布局(左栏A-D列、右栏F-L列、行号1-7)解析,保证老模板不受影响
+ * 5. 自动处理文本型数字转换(String→Integer/BigDecimal)
*/
public class DynamicDeliveryExcelListener extends AnalysisEventListener
-
- select max(user_id) as user_id from NGWL_TEST_USER."USER" where ORGANIZATION_ID = #{organizationId} and USER_MEMBER_CODE = #{userMemberCode} and DEL_FLAG = 1
+
+
+ select max(u.user_id) as user_id, max(u.user_name) as user_name, max(u.user_member_code) as user_member_code
+ from NGWL_TEST_USER."USER" u
+ left join NGWL_TEST_USER.USER_SHIPPER us
+ on us.USER_ID = u.USER_ID and us.DEL_FLAG = 1
+ where u.ORGANIZATION_ID = #{organizationId} and u.DEL_FLAG = 1
+ and (u.USER_MEMBER_CODE = #{userMemberCode} or us.CUSTOMER_NC_CODE = #{userMemberCode})
From da84b7bb69a3c2140624739860a39ec4cb3e4f1c Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Mon, 31 Aug 2026 13:41:19 +0800
Subject: [PATCH 19/87] =?UTF-8?q?feat(wms,oms)=EF=BC=9A=E5=BA=93=E5=AD=98?=
=?UTF-8?q?=E7=AE=A1=E7=90=86-=E5=BA=93=E5=AD=98=E6=9F=A5=E8=AF=A2?=
=?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=BF=9B=E8=B4=A7=E6=97=A5=E6=9C=9F=E3=80=81?=
=?UTF-8?q?=E5=85=A5=E5=BA=93=E6=97=A5=E6=9C=9F=E6=9F=A5=E8=AF=A2=E6=9D=A1?=
=?UTF-8?q?=E4=BB=B6=EF=BC=8C=E6=96=B0=E5=A2=9E=E8=BF=9B=E8=B4=A7=E6=97=A5?=
=?UTF-8?q?=E6=9C=9F=E5=AD=97=E6=AE=B5=E8=B4=AF=E9=80=9A=E6=94=B6=E8=B4=A7?=
=?UTF-8?q?-=E4=B8=8A=E6=9E=B6-=E5=BA=93=E5=AD=98=E5=85=A8=E9=93=BE?=
=?UTF-8?q?=E8=B7=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
需求:OMS/WMS 库存管理-库存查询页增加查询条件:物料分类(后端已支持,无需改动)、
进货日期(新增字段)、入库日期。
一、DDL(sql/20260831_wms_oms_add_purchase_date.sql)
WMS 收货明细、上架明细、物料库存及 OMS 预留库存共 4 张表新增 PURCHASE_DATE DATE 列,
附批次明细配置模板、执行前检查与回滚语句;须先执行 DDL 再发布服务。
二、进货日期录入与落库链路(收货→上架→WMS库存→OMS库存)
1、录入入口为收货批次属性「进货日期」标签(批次规则配置,标签须一字不差),
ReceiptMaterialDetailImpl 两处标签解析新增分支;
2、收货明细→上架明细:StockReceiptOrderDomainService 6 处日期拷贝点补 setPurchaseDate(含子项);
3、上架落库:stockIn/sj 赋值写入 material_inventory;
4、同步 OMS:MaterialInventoryOmsParamDO 新增字段经 Feign omsEdit 传递,
写入 reservation_material_inventory;
5、库存行合并键:批次规则勾选后进货日期参与分行(getParam 映射 + selectListByWhere 全等匹配),
OMS omsEdit 行匹配同步按进货日期区分,避免不同进货日期误合并到同一行。
三、查询条件(两模块 /list 接口)
1、进货日期:purchaseDate(单日精确)+ purchaseDateStart/purchaseDateEnd(区间,End 含当天);
2、入库日期:WMS 新增 createTimeStart/createTimeEnd(按库存行创建时间过滤,与 OMS 现有口径一致);
3、列表/导出返回新增 purchaseDate 字段,分组查询取 MAX(purchase_date)。
说明:历史库存进货日期为空,按进货日期查询查不到存量数据(无来源可回填),区间查询会排除空值行。
---
.../domain/MaterialInventoryOmsParamDO.java | 2 +
.../entity/ReservationMaterialInventory.java | 6 ++
.../ReservationMaterialInventoryImpl.java | 9 +++
.../po/ReservationMaterialInventoryPO.java | 6 ++
.../todo/ReservationMaterialInventoryDO.java | 9 +++
.../todo/ReservationMaterialInventoryDTO.java | 2 +
.../ReservationMaterialInventoryApi.java | 5 ++
.../MaterialInventoryMapper.xml | 14 +++-
.../entity/MaterialInventory.java | 6 ++
.../persistence/MaterialInventoryImpl.java | 1 +
.../repository/po/MaterialInventoryPO.java | 6 ++
.../repository/todo/MaterialInventoryDO.java | 14 ++++
.../todo/MaterialInventoryParamDO.java | 2 +
.../entity/ReceiptMaterialDetail.java | 5 ++
.../ReceiptMaterialDetailImpl.java | 18 +++++
.../po/ReceiptMaterialDetailPO.java | 5 ++
.../todo/ReceiptMaterialDetailDO.java | 5 ++
.../entity/ShelfMaterialDetail.java | 7 ++
.../todo/ShelfMaterialDetailDO.java | 6 ++
.../StockReceiptOrderDomainService.java | 12 +++-
.../service/StockShelfOrderDomainService.java | 5 ++
.../MaterialInventoryDTO.java | 10 +++
.../ShelfMaterialDetailDTO.java | 6 ++
.../MaterialInventoryApi.java | 7 +-
.../MaterialInventoryMapper.xml | 28 +++++++-
sql/20260831_wms_oms_add_purchase_date.sql | 68 +++++++++++++++++++
26 files changed, 257 insertions(+), 7 deletions(-)
create mode 100644 sql/20260831_wms_oms_add_purchase_date.sql
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/MaterialInventoryOmsParamDO.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/MaterialInventoryOmsParamDO.java
index 242ad102f..05f165a1a 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/MaterialInventoryOmsParamDO.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/MaterialInventoryOmsParamDO.java
@@ -83,6 +83,8 @@ public class MaterialInventoryOmsParamDO extends BaseVOEntity {
private Date productionDate;
//过期日期
private Date expiryDate;
+ //进货日期
+ private Date purchaseDate;
private String executioOrderNumber;
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/entity/ReservationMaterialInventory.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/entity/ReservationMaterialInventory.java
index e75764b66..41d50c856 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/entity/ReservationMaterialInventory.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/entity/ReservationMaterialInventory.java
@@ -210,6 +210,12 @@ public class ReservationMaterialInventory extends BaseVOEntity {
@Excel(name = "存货日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date inventoryDate;
+ @ApiModelProperty("进货日期")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @Excel(name = "进货日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ private Date purchaseDate;
+
@ApiModelProperty("ExtAttr3")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/persistence/ReservationMaterialInventoryImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/persistence/ReservationMaterialInventoryImpl.java
index 508bf043b..d7840252b 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/persistence/ReservationMaterialInventoryImpl.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/persistence/ReservationMaterialInventoryImpl.java
@@ -127,6 +127,9 @@ public class ReservationMaterialInventoryImpl extends ServiceImpl param = new LambdaQueryWrapper()
// .eq(ReservationMaterialInventory::getInOrderNumber, inOrderNumber)
//.eq(ReservationMaterialInventory::getLotNumber, lotNumber)
@@ -148,6 +151,11 @@ public class ReservationMaterialInventoryImpl extends ServiceImpl reservationMaterialInventories = materialInventoryMapper.selectList(param);
if (reservationMaterialInventories != null && reservationMaterialInventories.size() > 0) {
ReservationMaterialInventory reservationMaterialInventory = reservationMaterialInventories.get(0);
@@ -542,6 +550,7 @@ public class ReservationMaterialInventoryImpl extends ServiceImpl
+
@@ -138,7 +139,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
IFNULL (sum(a.GROSS_WEIGHT), 0) GROSS_WEIGHT,
IFNULL (sum(a.VOLUME), 0) VOLUME,
a.ext_attr_1, a.ext_attr_2, a.ext_attr_3, a.ext_attr_4,
- a.production_date, a.expiry_date, a.inventory_date,
+ a.production_date, a.expiry_date, a.inventory_date, a.purchase_date,
a.BATCH_REF_NO, a.SHEET_REF_NO, a.BOX_PALLET_NO,nvl(a.unit_name,b.unit_name) as unit_name,
a.bar_code as inv_bar_code,
a.in_order_number,a.lot_number
@@ -280,6 +281,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and a.expiry_date DATEADD(DAY, 1, #{expiryDateEnd})
+
+ AND TO_CHAR(a.purchase_date, 'yyyy-MM-dd') = #{purchaseDateStr}
+
+
+ and a.purchase_date >= #{purchaseDateStart}
+
+
+ and a.purchase_date DATEADD(DAY, 1, #{purchaseDateEnd})
+
@@ -534,6 +550,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
MAX(a.unit_name) AS unit_name,
MAX(a.production_date) AS production_date,
MAX(a.inventory_date) AS inventory_date,
+ MAX(a.purchase_date) AS purchase_date,
MAX(a.batch_ref_no) AS batch_ref_no, MAX(a.sheet_ref_no) AS sheet_ref_no, MAX(a.box_pallet_no) AS box_pallet_no,
MAX(a.bar_code) AS inv_bar_code,
MAX(a.in_order_number) AS in_order_number, MAX(a.lot_number) AS lot_number,
@@ -1195,6 +1212,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+
@@ -1513,6 +1531,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
AND TRUNC(a.PRODUCTION_DATE) = TRUNC(#{productionDate})
+
+ AND TRUNC(a.purchase_date) = TRUNC(#{purchaseDate})
+
AND a.EXT_ATTR_2 = #{extAttr2}
@@ -1544,6 +1565,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
AND a.PRODUCTION_DATE is null
+
+ AND a.purchase_date is null
+
AND a.EXT_ATTR_2 = #{extAttr2}
diff --git a/sql/20260831_wms_oms_add_purchase_date.sql b/sql/20260831_wms_oms_add_purchase_date.sql
new file mode 100644
index 000000000..a521b45c7
--- /dev/null
+++ b/sql/20260831_wms_oms_add_purchase_date.sql
@@ -0,0 +1,68 @@
+-- =============================================================================
+-- OMS/WMS 库存查询新增「进货日期」查询条件 —— 新增 PURCHASE_DATE 列
+-- 日期: 2026-08-31
+-- 数据库: 达梦(DM8), 兼容 Oracle 语法, 表名/字段名统一大写
+-- 模式: NGWL_TEST_WMS (mhd_wms) / NGWL_TEST_OMS (mhd_oms)
+-- 需求:
+-- OMS-库存管理-库存查询 / WMS-库存管理-库存查询 增加查询条件:
+-- 物料分类(后端已支持, 无需改表)、进货日期(本脚本, 新字段)、入库日期(复用
+-- create_time, 无需改表)。
+-- 说明:
+-- 1. 进货日期录入入口为「收货批次属性」(batch_detail 配置标签「进货日期」),
+-- 链路: 收货明细 -> 上架明细 -> WMS 物料库存 -> Feign -> OMS 预留库存。
+-- 2. 列追加在表尾(DM 不支持 AFTER 定位); 历史数据该列为空, 按进货日期查询
+-- 查不到存量库存(无来源可回填)。
+-- 3. DATE 类型与同表现有 PRODUCTION_DATE/EXPIRY_DATE/INVENTORY_DATE 保持一致。
+-- =============================================================================
+
+-- WMS 收货明细
+ALTER TABLE "NGWL_TEST_WMS"."RECEIPT_MATERIAL_DETAIL" ADD COLUMN PURCHASE_DATE DATE;
+COMMENT ON COLUMN "NGWL_TEST_WMS"."RECEIPT_MATERIAL_DETAIL".PURCHASE_DATE IS '进货日期';
+
+-- WMS 上架明细
+ALTER TABLE "NGWL_TEST_WMS"."SHELF_MATERIAL_DETAIL" ADD COLUMN PURCHASE_DATE DATE;
+COMMENT ON COLUMN "NGWL_TEST_WMS"."SHELF_MATERIAL_DETAIL".PURCHASE_DATE IS '进货日期';
+
+-- WMS 物料库存
+ALTER TABLE "NGWL_TEST_WMS"."MATERIAL_INVENTORY" ADD COLUMN PURCHASE_DATE DATE;
+COMMENT ON COLUMN "NGWL_TEST_WMS"."MATERIAL_INVENTORY".PURCHASE_DATE IS '进货日期';
+
+-- OMS 预留库存
+ALTER TABLE "NGWL_TEST_OMS"."RESERVATION_MATERIAL_INVENTORY" ADD COLUMN PURCHASE_DATE DATE;
+COMMENT ON COLUMN "NGWL_TEST_OMS"."RESERVATION_MATERIAL_INVENTORY".PURCHASE_DATE IS '进货日期';
+
+-- =============================================================================
+-- 批次明细配置(可选, 数据操作): 需要按进货日期录入/分行的物料, 在其批次规则中
+-- 新增一条明细。BATCH_LABELS 必须一字不差为「进货日期」(后端 setMore() 按标签
+-- 精确匹配解析); IS_DISPLAY=1 时同时参与库存行合并键(不同进货日期分库存行)。
+--
+-- 参考现有「生产日期」配置行(格式/控件取值对齐):
+-- SELECT * FROM "NGWL_TEST_SYSTEM"."BATCH_DETAIL" WHERE BATCH_LABELS = '生产日期';
+--
+-- 配置模板(BATCH_ID 等按实际批次规则替换, 建议直接在 系统-批次管理 界面新增):
+-- INSERT INTO "NGWL_TEST_SYSTEM"."BATCH_DETAIL"
+-- (BATCH_DETAIL_ID, ORGANIZATION_ID, TOP_ORGANIZATION_ID, BATCH_ID,
+-- BATCH_LABELS, FIELD_NAME, INPUT_CONTROL, ATTRIBUTE_FORMAT, IS_DISPLAY)
+-- VALUES
+-- (<主键>, <组织ID>, <顶级组织ID>, <批次规则ID>,
+-- '进货日期', 'purchase_date', <同生产日期行>, '2', 1);
+-- -- ATTRIBUTE_FORMAT: 2-日期
+-- =============================================================================
+
+-- =============================================================================
+-- 执行前检查(确认列不存在, 避免重复执行报错; DM 数据字典标识符按大写存储)
+-- SELECT OWNER, TABLE_NAME, COLUMN_NAME
+-- FROM ALL_TAB_COLUMNS
+-- WHERE COLUMN_NAME = 'PURCHASE_DATE'
+-- AND OWNER IN ('NGWL_TEST_WMS', 'NGWL_TEST_OMS')
+-- AND TABLE_NAME IN ('RECEIPT_MATERIAL_DETAIL', 'SHELF_MATERIAL_DETAIL',
+-- 'MATERIAL_INVENTORY', 'RESERVATION_MATERIAL_INVENTORY');
+--
+-- 回滚(发布前执行了本脚本需回退时)
+-- ALTER TABLE "NGWL_TEST_WMS"."RECEIPT_MATERIAL_DETAIL" DROP COLUMN PURCHASE_DATE;
+-- ALTER TABLE "NGWL_TEST_WMS"."SHELF_MATERIAL_DETAIL" DROP COLUMN PURCHASE_DATE;
+-- ALTER TABLE "NGWL_TEST_WMS"."MATERIAL_INVENTORY" DROP COLUMN PURCHASE_DATE;
+-- ALTER TABLE "NGWL_TEST_OMS"."RESERVATION_MATERIAL_INVENTORY" DROP COLUMN PURCHASE_DATE;
+--
+-- 发布顺序: 先执行本 DDL 再发布服务(实体带新字段而表无列, MyBatis-Plus insert 会报错)
+-- =============================================================================
From 5ba6a3b73d41aa8bdadabbf138579cfd34f1414f Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Mon, 31 Aug 2026 13:43:11 +0800
Subject: [PATCH 20/87] =?UTF-8?q?=E5=8F=91=E6=B5=8B=E8=AF=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../com/mhd/system/api/BmsServiceFeign.java | 2 +-
.../com/mhd/system/api/OmsServiceFeign.java | 2 +-
.../com/mhd/system/api/WlhyServiceFeign.java | 2 +-
.../com/mhd/system/api/WmsServiceFeign.java | 2 +-
.../com/mhd/system/api/YmsServiceFeign.java | 2 +-
.../core/feign/ThirdPartyServiceFeign.java | 2 +-
.../feign/ThirdPartyServiceFeign.java | 2 +-
mhd_oms/src/main/resources/bootstrap.yml | 8 +++----
mhd_wms/src/main/resources/bootstrap.yml | 24 +------------------
9 files changed, 12 insertions(+), 34 deletions(-)
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
index 8cc8bfd57..0d65c89a1 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
@@ -18,7 +18,7 @@ import java.util.Set;
/**
* bms财务结算系统feign调用接口
*/
-@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.32:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.33.0.129:8012",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface BmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
index 4ef3bed80..8a7006304 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.concurrent.CompletableFuture;
-@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.33:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.33.0.99:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface OmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
index d976fcc98..ba9a45148 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
@@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
-@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.102.192.31:8014",configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.33.0.129:8014",configuration = FeignAutoConfiguration.class)
public interface WlhyServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
index 1fe69a003..7fbd7dd9b 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
@@ -21,7 +21,7 @@ import java.util.Map;
* @description: TODO
* @date 2024/5/10 8:58
**/
-@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.32:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.33.0.109:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface WmsServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
index 750ed853e..beba5b1af 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
@@ -9,7 +9,7 @@ import com.mhd.system.api.feign.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
-@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.33:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.33.0.99:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface YmsServiceFeign {
/**
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
index 509644885..9fd21ae67 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
@@ -26,7 +26,7 @@ import java.io.InputStream;
import java.util.List;
import java.util.Map;
-@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.31:8012", configuration = FeignAutoConfiguration.class)
+@FeignClient(value = "mhd-third-party-service",url = "http://10.33.0.129:8012",configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
index 8c86ae1ad..376500b1c 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
@@ -22,7 +22,7 @@ import java.util.Map;
/**
* 三方服务 Feign
*/
-@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.31:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.33.0.129:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/resources/bootstrap.yml b/mhd_oms/src/main/resources/bootstrap.yml
index 542b6bce7..88471e390 100644
--- a/mhd_oms/src/main/resources/bootstrap.yml
+++ b/mhd_oms/src/main/resources/bootstrap.yml
@@ -18,15 +18,15 @@ spring:
discovery:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
-# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.31:6848
+ server-addr: 10.33.0.129:6010
+# server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
config:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
-# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.31:6848
+ server-addr: 10.33.0.129:6010
+# server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
diff --git a/mhd_wms/src/main/resources/bootstrap.yml b/mhd_wms/src/main/resources/bootstrap.yml
index b99fb0b27..39eb710cb 100644
--- a/mhd_wms/src/main/resources/bootstrap.yml
+++ b/mhd_wms/src/main/resources/bootstrap.yml
@@ -34,26 +34,4 @@ spring:
file-extension: yml
# 共享配置
shared-configs:
- - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
-# XXL-JOB 配置
-#xxl:
-# job:
-# # 调度中心地址(填你部署的地址)
-# admin:
-# addresses: http://192.168.1.6:8020/xxl-job-admin
-# # 执行器配置
-# executor:
-# # 执行器名称(自定义,后面调度中心要用到)
-# appname: wms-service-executor
-# # 执行器注册地址,默认0表示自动获取
-# address:
-# # 执行器IP,默认空自动获取
-# ip:
-# # 执行器端口号(每个微服务不能重复,建议9997/9998/9999)
-# port: 9997
-# # 执行器日志存放路径
-# logpath: /data/applogs/xxl-job/jobhandler
-# # 日志保留天数
-# logretentiondays: 30
-# # 调度中心通讯令牌(默认空,安全可设置)
-# accessToken: default_token
\ No newline at end of file
+ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
\ No newline at end of file
From bc3afbacb1f0255a24ab6fb864b141faa9c2d4d9 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Mon, 31 Aug 2026 13:58:02 +0800
Subject: [PATCH 21/87] =?UTF-8?q?feat(wms,oms)=EF=BC=9A=E7=89=A9=E6=96=99?=
=?UTF-8?q?=E5=88=86=E7=B1=BB=EF=BC=9A=E5=BA=93=E5=AD=98=E5=88=97=E8=A1=A8?=
=?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=A2=9E=E5=8A=A0=20materialClassifyCode/Nam?=
=?UTF-8?q?e=20=E6=98=BE=E5=BC=8F=E6=98=A0=E5=B0=84=20=20=20=20=20=20=20?=
=?UTF-8?q?=20=EF=BC=88ListTypeHandler=EF=BC=8C=E6=95=B0=E6=8D=AE=E5=85=B3?=
=?UTF-8?q?=E8=81=94=20material=5Fbase=5Finfo=20=E5=B8=A6=E5=87=BA?=
=?UTF-8?q?=EF=BC=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../MaterialInventoryMapper.xml | 4 ++++
.../mapper/materialInventory/MaterialInventoryMapper.xml | 8 ++++++++
2 files changed, 12 insertions(+)
diff --git a/mhd_oms/src/main/resources/mapper/reservationMaterialInventory/MaterialInventoryMapper.xml b/mhd_oms/src/main/resources/mapper/reservationMaterialInventory/MaterialInventoryMapper.xml
index aa52628aa..dd3ab9e73 100644
--- a/mhd_oms/src/main/resources/mapper/reservationMaterialInventory/MaterialInventoryMapper.xml
+++ b/mhd_oms/src/main/resources/mapper/reservationMaterialInventory/MaterialInventoryMapper.xml
@@ -65,6 +65,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+
+
diff --git a/mhd_wms/src/main/resources/mapper/materialInventory/MaterialInventoryMapper.xml b/mhd_wms/src/main/resources/mapper/materialInventory/MaterialInventoryMapper.xml
index fffc8b3ac..8df558332 100644
--- a/mhd_wms/src/main/resources/mapper/materialInventory/MaterialInventoryMapper.xml
+++ b/mhd_wms/src/main/resources/mapper/materialInventory/MaterialInventoryMapper.xml
@@ -66,6 +66,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+
+
@@ -745,6 +749,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+
+
From a74afd837c8ee658e00cf4b7011c7ed7b8ed919b Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Mon, 31 Aug 2026 15:22:59 +0800
Subject: [PATCH 22/87] =?UTF-8?q?feat(oms):=E5=85=A5=E5=BA=93=E4=B8=9A?=
=?UTF-8?q?=E5=8A=A1=E5=8D=95=E6=96=B0=E5=A2=9E=E9=A1=B5=E9=9D=A2=E6=96=B0?=
=?UTF-8?q?=E5=A2=9E=E6=8C=89=E7=89=A9=E6=96=99=E7=BC=96=E5=8F=B7=E6=9F=A5?=
=?UTF-8?q?=E8=AF=A2=E5=BA=93=E5=AD=98=E6=89=B9=E6=AC=A1=E6=9C=80=E8=BF=91?=
=?UTF-8?q?5=E6=9D=A1=E8=BF=87=E6=9C=9F=E6=97=A5=E6=9C=9F=E6=8E=A5?=
=?UTF-8?q?=E5=8F=A3=20/reservationMaterialInventoryApi/queryRecentExpiryD?=
=?UTF-8?q?ates/{materialCode}=EF=BC=8C=E6=8C=89=E7=89=A9=E6=96=99?=
=?UTF-8?q?=E7=BC=96=E5=8F=B7=E5=85=B3=E8=81=94=20NGWL=5FTEST=5FWMS.materi?=
=?UTF-8?q?al=5Fbase=5Finfo=20=E6=9F=A5=20reservation=5Fmaterial=5Finvento?=
=?UTF-8?q?ry=20=E5=BA=93=E5=AD=98=E6=89=B9=E6=AC=A1=EF=BC=8C=E8=BF=94?=
=?UTF-8?q?=E5=9B=9E=E8=BF=87=E6=9C=9F=E6=97=A5=E6=9C=9F+=E6=89=B9?=
=?UTF-8?q?=E6=AC=A1=E5=8F=B7=EF=BC=88date=5Fformat=20=E6=8C=89=E5=A4=A9?=
=?UTF-8?q?=E5=8E=BB=E9=87=8D=E3=80=81=E5=88=B0=E6=9C=9F=E6=97=A5=E5=80=92?=
=?UTF-8?q?=E5=BA=8F=E3=80=81limit=205=EF=BC=89=EF=BC=8C=E4=BE=9B=E5=89=8D?=
=?UTF-8?q?=E7=AB=AF=E4=B8=8B=E6=8B=89=E5=9B=9E=E6=98=BE=EF=BC=88=E4=B9=9F?=
=?UTF-8?q?=E5=8F=AF=E7=82=B9=E6=97=A5=E6=9C=9F=E5=9B=BE=E6=A0=87=E6=89=8B?=
=?UTF-8?q?=E5=8A=A8=E9=80=89=E6=8B=A9=EF=BC=89=EF=BC=9B=E9=9D=9E=E5=B9=B3?=
=?UTF-8?q?=E5=8F=B0=E7=A7=9F=E6=88=B7=E6=8C=89=E7=99=BB=E5=BD=95=E7=94=A8?=
=?UTF-8?q?=E6=88=B7=E4=B8=80=E7=BA=A7=E7=BB=84=E7=BB=87=20top=5Forganizat?=
=?UTF-8?q?ion=5Fid=20=E8=BF=87=E6=BB=A4=EF=BC=88=E4=B8=8E=20/list=20?=
=?UTF-8?q?=E4=B8=80=E8=87=B4=EF=BC=89=EF=BC=9B=E6=B2=BF=E7=94=A8=20Api?=
=?UTF-8?q?=E2=86=92ApplicationService=E2=86=92DomainService=E2=86=92Facad?=
=?UTF-8?q?e=E2=86=92Impl=E2=86=92Mapper=20=E5=88=86=E5=B1=82=EF=BC=8C?=
=?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=93=8D=E5=BA=94=E5=AF=B9=E8=B1=A1=20Materi?=
=?UTF-8?q?alInventoryExpiryBatchPO(expiryDate/batchNumber)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../IReservationMaterialInventoryService.java | 6 +++++
.../ReservationMaterialInventoryMapper.java | 4 +++
.../ReservationMaterialInventoryImpl.java | 9 +++++++
.../po/MaterialInventoryExpiryBatchPO.java | 25 +++++++++++++++++++
...onMaterialInventoryApplicationService.java | 17 +++++++++++++
...rvationMaterialInventoryDomainService.java | 8 ++++++
.../ReservationMaterialInventoryApi.java | 14 +++++++++++
.../MaterialInventoryMapper.xml | 17 +++++++++++++
8 files changed, 100 insertions(+)
create mode 100644 mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/po/MaterialInventoryExpiryBatchPO.java
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/facade/IReservationMaterialInventoryService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/facade/IReservationMaterialInventoryService.java
index 5344f3163..bd81f1a21 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/facade/IReservationMaterialInventoryService.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/facade/IReservationMaterialInventoryService.java
@@ -2,6 +2,7 @@ package com.mhd.oms.domain.reservationMaterialInventory.repository.facade;
import com.baomidou.mybatisplus.extension.service.IService;
import com.mhd.oms.domain.reservationMaterialInventory.entity.ReservationMaterialInventory;
+import com.mhd.oms.domain.reservationMaterialInventory.repository.po.MaterialInventoryExpiryBatchPO;
import com.mhd.oms.domain.reservationMaterialInventory.repository.po.ReservationMaterialInventoryPO;
import com.mhd.oms.domain.reservationMaterialInventory.repository.po.ReservationMaterialInventoryQueryListPO;
import com.mhd.oms.domain.reservationMaterialInventory.repository.todo.MaterialInventoryParamDO;
@@ -113,4 +114,9 @@ public interface IReservationMaterialInventoryService extends IService selectRecentExpiryBatches(String materialCode, Long topOrganizationId);
}
\ No newline at end of file
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/mapper/ReservationMaterialInventoryMapper.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/mapper/ReservationMaterialInventoryMapper.java
index e655c623d..a73033a6b 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/mapper/ReservationMaterialInventoryMapper.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/mapper/ReservationMaterialInventoryMapper.java
@@ -2,6 +2,7 @@ package com.mhd.oms.domain.reservationMaterialInventory.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.mhd.oms.domain.reservationMaterialInventory.entity.ReservationMaterialInventory;
+import com.mhd.oms.domain.reservationMaterialInventory.repository.po.MaterialInventoryExpiryBatchPO;
import com.mhd.oms.domain.reservationMaterialInventory.repository.po.ReservationMaterialInventoryPO;
import com.mhd.oms.domain.reservationMaterialInventory.repository.todo.MaterialBarCodePO;
import com.mhd.oms.domain.reservationMaterialInventory.repository.todo.MaterialBaseInfo;
@@ -36,4 +37,7 @@ public interface ReservationMaterialInventoryMapper extends BaseMapper getInfoByMaterialBaseInfoIds(@Param("id") Long id);
+
+ //入库业务单新增:根据物料编号查询库存批次去重后的过期日期+批次号(最近5条),供前端下拉回显
+ public List selectRecentExpiryBatches(@Param("materialCode") String materialCode, @Param("topOrganizationId") Long topOrganizationId);
}
\ No newline at end of file
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/persistence/ReservationMaterialInventoryImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/persistence/ReservationMaterialInventoryImpl.java
index d7840252b..d666fc65a 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/persistence/ReservationMaterialInventoryImpl.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/persistence/ReservationMaterialInventoryImpl.java
@@ -13,6 +13,7 @@ import com.mhd.oms.domain.reservationInventoryAdjustmentRecord.repository.mapper
import com.mhd.oms.domain.reservationMaterialInventory.entity.ReservationMaterialInventory;
import com.mhd.oms.domain.reservationMaterialInventory.repository.facade.IReservationMaterialInventoryService;
import com.mhd.oms.domain.reservationMaterialInventory.repository.mapper.ReservationMaterialInventoryMapper;
+import com.mhd.oms.domain.reservationMaterialInventory.repository.po.MaterialInventoryExpiryBatchPO;
import com.mhd.oms.domain.reservationMaterialInventory.repository.po.ReservationMaterialInventoryPO;
import com.mhd.oms.domain.reservationMaterialInventory.repository.po.ReservationMaterialInventoryQueryListPO;
import com.mhd.oms.domain.reservationMaterialInventory.repository.todo.MaterialBarCodePO;
@@ -120,6 +121,14 @@ public class ReservationMaterialInventoryImpl extends ServiceImpl selectRecentExpiryBatches(String materialCode, Long topOrganizationId) {
+ return materialInventoryMapper.selectRecentExpiryBatches(materialCode, topOrganizationId);
+ }
+
@Override
public Boolean omsEdit(MaterialInventoryOmsParamDO materialInventoryOmsParamDO) {
String inOrderNumber = materialInventoryOmsParamDO.getInOrderNumber();
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/po/MaterialInventoryExpiryBatchPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/po/MaterialInventoryExpiryBatchPO.java
new file mode 100644
index 000000000..eb47478e3
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/po/MaterialInventoryExpiryBatchPO.java
@@ -0,0 +1,25 @@
+package com.mhd.oms.domain.reservationMaterialInventory.repository.po;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 物料库存批次过期日期对象(入库业务单新增页面下拉回显)
+ *
+ * @author rcx
+ * @date 2026-08-31
+ */
+@Data
+@ApiModel(value = "物料库存批次过期日期", description = "物料库存批次过期日期响应对象")
+public class MaterialInventoryExpiryBatchPO implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("过期日期 yyyy-MM-dd")
+ private String expiryDate;
+
+ @ApiModelProperty("批次号")
+ private String batchNumber;
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/service/ReservationMaterialInventoryApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/service/ReservationMaterialInventoryApplicationService.java
index fe6184862..c41ef1051 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/service/ReservationMaterialInventoryApplicationService.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/service/ReservationMaterialInventoryApplicationService.java
@@ -8,6 +8,7 @@ import com.mhd.common.core.utils.bean.BeanUtils;
import com.mhd.common.core.web.domain.AjaxResult;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.oms.domain.reservationMaterialInventory.repository.mapper.ReservationMaterialInventoryMapper;
+import com.mhd.oms.domain.reservationMaterialInventory.repository.po.MaterialInventoryExpiryBatchPO;
import com.mhd.oms.domain.reservationMaterialInventory.repository.po.ReservationMaterialInventoryPO;
import com.mhd.oms.domain.reservationMaterialInventory.repository.po.ReservationMaterialInventoryQueryListPO;
import com.mhd.oms.domain.reservationMaterialInventory.repository.todo.MaterialBarCodePO;
@@ -185,6 +186,22 @@ public class ReservationMaterialInventoryApplicationService {
return materialInventoryDomainService.getInventoryByStorageLocationIdAndMaterialBaseInfoId(storageLocationId, materialBaseInfoId);
}
+ /**
+ * 根据物料编号查询库存批次最近5条过期日期+批次号(入库业务单新增页面下拉回显)
+ * 与 queryList 一致:按登录用户一级组织(租户)过滤,一级组织(平台)不限制
+ */
+ public List selectRecentExpiryBatches(String materialCode) {
+ Long topOrganizationId = null;
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ Long loginTopOrgId = loginUser.getUserPo().getTopOrganizationId();
+ if (loginTopOrgId != null && loginTopOrgId != 1) {
+ topOrganizationId = loginTopOrgId;
+ }
+ }
+ return materialInventoryDomainService.selectRecentExpiryBatches(materialCode, topOrganizationId);
+ }
+
/**
* @description:库存查询列表
* @param materialInventoryQueryListDO
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/service/ReservationMaterialInventoryDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/service/ReservationMaterialInventoryDomainService.java
index fc73a5f42..40cc12ad1 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/service/ReservationMaterialInventoryDomainService.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/service/ReservationMaterialInventoryDomainService.java
@@ -3,6 +3,7 @@ package com.mhd.oms.domain.reservationMaterialInventory.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mhd.oms.domain.reservationMaterialInventory.entity.ReservationMaterialInventory;
import com.mhd.oms.domain.reservationMaterialInventory.repository.facade.IReservationMaterialInventoryService;
+import com.mhd.oms.domain.reservationMaterialInventory.repository.po.MaterialInventoryExpiryBatchPO;
import com.mhd.oms.domain.reservationMaterialInventory.repository.po.ReservationMaterialInventoryPO;
import com.mhd.oms.domain.reservationMaterialInventory.repository.po.ReservationMaterialInventoryQueryListPO;
import com.mhd.oms.domain.reservationMaterialInventory.repository.todo.ReservationMaterialInventoryDO;
@@ -88,6 +89,13 @@ public class ReservationMaterialInventoryDomainService {
return materialInventory.getInventoryQuantity();
}
+ /**
+ * 根据物料编号查询库存批次最近5条过期日期+批次号(入库业务单新增页面下拉回显)
+ */
+ public List selectRecentExpiryBatches(String materialCode, Long topOrganizationId) {
+ return materialInventoryService.selectRecentExpiryBatches(materialCode, topOrganizationId);
+ }
+
/**
* @description:库存查询列表
* @param materialInventoryQueryListDO
diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationMaterialInventory/ReservationMaterialInventoryApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationMaterialInventory/ReservationMaterialInventoryApi.java
index 16f52281b..bae725a5c 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationMaterialInventory/ReservationMaterialInventoryApi.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationMaterialInventory/ReservationMaterialInventoryApi.java
@@ -177,6 +177,20 @@ public class ReservationMaterialInventoryApi extends BaseController {
return AjaxResult.success(materialInventoryApplicationService.getInventoryByStorageLocationIdAndMaterialBaseInfoId(storageLocationId, materialBaseInfoId));
}
+ /**
+ * 入库业务单新增页面:根据物料编号查询其库存批次过期日期+批次号,去重取最近5条,
+ * 供前端下拉回显;用户也可点击右侧"日期"小图标手动选择日期
+ */
+ @ApiOperation("根据物料编号查询库存批次最近5条过期日期+批次号")
+ @GetMapping(value = "/queryRecentExpiryDates/{materialCode}")
+ public AjaxResult queryRecentExpiryDates(@PathVariable("materialCode") String materialCode)
+ {
+ if (StringUtils.isBlank(materialCode)) {
+ return AjaxResult.error("物料编号不能为空");
+ }
+ return AjaxResult.success(materialInventoryApplicationService.selectRecentExpiryBatches(materialCode));
+ }
+
/**
diff --git a/mhd_oms/src/main/resources/mapper/reservationMaterialInventory/MaterialInventoryMapper.xml b/mhd_oms/src/main/resources/mapper/reservationMaterialInventory/MaterialInventoryMapper.xml
index dd3ab9e73..1bea8b465 100644
--- a/mhd_oms/src/main/resources/mapper/reservationMaterialInventory/MaterialInventoryMapper.xml
+++ b/mhd_oms/src/main/resources/mapper/reservationMaterialInventory/MaterialInventoryMapper.xml
@@ -557,4 +557,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
FROM NGWL_TEST_WMS.material_bar_code
WHERE material_base_info_id = #{id} AND del_flag = 1
+
+
+
+ select distinct
+ date_format(a.expiry_date, '%Y-%m-%d') as expiryDate,
+ a.batch_number as batchNumber
+ from reservation_material_inventory a
+ left join NGWL_TEST_WMS.material_base_info b on a.material_base_info_id = b.material_base_info_id
+ where a.del_flag = 1
+ and a.expiry_date is not null
+ and b.material_code = #{materialCode}
+
+ and a.top_organization_id = #{topOrganizationId}
+
+ order by expiryDate desc, batchNumber desc
+ limit 5
+
\ No newline at end of file
From a983ae639ecf4079dd09b33a277ff152c701bad7 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Mon, 31 Aug 2026 15:59:54 +0800
Subject: [PATCH 23/87] =?UTF-8?q?fix(wms,oms)=EF=BC=9A=E7=89=A9=E6=96=99/?=
=?UTF-8?q?=E8=BF=87=E6=9C=9F=E6=97=A5=E6=9C=9F=E6=9F=A5=E8=AF=A2=E8=A1=A5?=
=?UTF-8?q?=E6=9F=A5=E5=85=A5=E5=BA=93=E6=97=A5=E6=9C=9F(create=5Ftime)?=
=?UTF-8?q?=E4=B8=8E=E6=9B=B4=E6=96=B0=E6=97=B6=E9=97=B4=EF=BC=8C=E5=88=86?=
=?UTF-8?q?=E7=BB=84=E9=A1=B5=E7=AD=BE=E5=85=A5=E5=BA=93=E6=97=A5=E6=9C=9F?=
=?UTF-8?q?=E6=98=BE=E7=A4=BA=E4=B8=BA=E7=A9=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../MaterialInventoryMapper.xml | 4 ++++
.../MaterialInventoryMapper.xml | 19 +++++++++++++++++++
2 files changed, 23 insertions(+)
diff --git a/mhd_oms/src/main/resources/mapper/reservationMaterialInventory/MaterialInventoryMapper.xml b/mhd_oms/src/main/resources/mapper/reservationMaterialInventory/MaterialInventoryMapper.xml
index 1bea8b465..200226335 100644
--- a/mhd_oms/src/main/resources/mapper/reservationMaterialInventory/MaterialInventoryMapper.xml
+++ b/mhd_oms/src/main/resources/mapper/reservationMaterialInventory/MaterialInventoryMapper.xml
@@ -379,6 +379,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
IFNULL(SUM(a.VOLUME), 0) AS VOLUME,
MAX(a.unit) AS unit,
MAX(a.unit_name) AS unit_name,
+ MAX(a.create_time) AS create_time,
+ MAX(a.update_time) AS update_time,
MAX(a.production_date) AS production_date,
MAX(a.inventory_date) AS inventory_date,
MAX(a.purchase_date) AS purchase_date,
@@ -386,6 +388,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
MAX(a.bar_code) AS inv_bar_code,
MAX(a.in_order_number) AS in_order_number, MAX(a.lot_number) AS lot_number,
b.material_code, b.material_name,
+ MAX(b.material_classify_code) AS material_classify_code,
+ MAX(b.material_classify_name) AS material_classify_name,
CASE WHEN IFNULL(SUM(a.inventory_quantity), 0) = 0 THEN 1 ELSE 0 END AS sort_order
from reservation_material_inventory a
left join NGWL_TEST_WMS.material_base_info b on a.material_base_info_id = b.material_base_info_id
diff --git a/mhd_wms/src/main/resources/mapper/materialInventory/MaterialInventoryMapper.xml b/mhd_wms/src/main/resources/mapper/materialInventory/MaterialInventoryMapper.xml
index 8df558332..3b55cabce 100644
--- a/mhd_wms/src/main/resources/mapper/materialInventory/MaterialInventoryMapper.xml
+++ b/mhd_wms/src/main/resources/mapper/materialInventory/MaterialInventoryMapper.xml
@@ -416,6 +416,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
group by a.MATERIAL_INVENTORY_ID order by sort_order, a.update_time desc
+
+
+ select IFNULL(SUM(a.inventory_quantity), 0)
+ from material_inventory a
+ left join material_base_info b on a.material_base_info_id = b.material_base_info_id
+
+
+
+
+
+
+
+ a.del_flag = 1
+ and a.level = 1
+ and b.del_flag = 1
+ and b.status = 5
+
+ and b.top_organization_id = #{topOrganizationId}
+
+
+ and b.warehouse_name like concat('%', #{warehouseName}, '%')
+
+
+ and b.in_order_number like concat('%', #{inOrderNumber}, '%')
+
+
+ and b.shipper_code like concat('%', #{shipperCode}, '%')
+
+
+ and b.shipper_name like concat('%', #{shipperName}, '%')
+
+
+ and a.material_code like concat('%', #{materialCode}, '%')
+
+
+ and a.material_name like concat('%', #{materialName}, '%')
+
+
+ and date_format(b.warehouse_date,'%Y-%m-%d') >= #{warehouseDateStart}
+
+
+ and date_format(b.warehouse_date,'%Y-%m-%d') <= #{warehouseDateEnd}
+
+
+
+
+ from execution_in_material_detail a
+ join execution_stock_in_order b on a.in_order_number = b.in_order_number and b.del_flag = 1
+ left join NGWL_TEST_WMS.material_base_info c on a.material_base_info_id = c.material_base_info_id
+
+
+
+
+ select
+ MAX(b.warehouse_date) AS warehouseDate,
+ b.in_order_number AS inOrderNumber,
+ MAX(b.shipper_code) AS shipperCode,
+ MAX(b.shipper_name) AS shipperName,
+ 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.PIECE_COUNT), 0) AS pieceCount,
+ ROUND(IFNULL(SUM(a.TOTAL_GROSS_WEIGHT), 0) / 1000, 3) AS grossWeightTon,
+ MAX(IFNULL(c.insure_amount, 0)) AS insureAmount,
+ IFNULL(SUM(a.TOTAL_VOLUME), 0) AS totalVolume
+
+
+
+
+ GROUP BY b.in_order_number, a.material_code
+ order by pieceCount desc, warehouseDate desc, inOrderNumber desc
+
+
+
+
+ select
+ IFNULL(SUM(t.pieceCount), 0) AS totalPieceCount,
+ ROUND(IFNULL(SUM(t.grossWeightKG), 0) / 1000, 3) AS totalGrossWeightTon,
+ IFNULL(SUM(t.insureAmount), 0) AS totalInsureAmount,
+ IFNULL(SUM(t.totalVolume), 0) AS totalVolume,
+ COUNT(DISTINCT t.inOrderNumber) AS totalOrderCount
+ from (
+ select
+ b.in_order_number AS inOrderNumber,
+ IFNULL(SUM(a.PIECE_COUNT), 0) AS pieceCount,
+ IFNULL(SUM(a.TOTAL_GROSS_WEIGHT), 0) AS grossWeightKG,
+ MAX(IFNULL(c.insure_amount, 0)) AS insureAmount,
+ IFNULL(SUM(a.TOTAL_VOLUME), 0) AS totalVolume
+
+
+
+
+ GROUP BY b.in_order_number, a.material_code
+ ) t
+
+
diff --git a/mhd_oms/src/main/resources/mapper/outboundRank/ExecutionOutboundRankMapper.xml b/mhd_oms/src/main/resources/mapper/outboundRank/ExecutionOutboundRankMapper.xml
new file mode 100644
index 000000000..77fccdc12
--- /dev/null
+++ b/mhd_oms/src/main/resources/mapper/outboundRank/ExecutionOutboundRankMapper.xml
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+ a.del_flag = 1
+ and a.level = 1
+ and b.del_flag = 1
+ and b.status = 9
+
+ and b.top_organization_id = #{topOrganizationId}
+
+
+ and b.warehouse_name like concat('%', #{warehouseName}, '%')
+
+
+ and b.customer_name like concat('%', #{customerName}, '%')
+
+
+ and b.shipper_name like concat('%', #{shipperName}, '%')
+
+
+ and b.line_code like concat('%', #{lineCode}, '%')
+
+
+ and b.line_name like concat('%', #{lineName}, '%')
+
+
+ and date_format(b.create_time,'%Y-%m-%d') >= #{createTimeStart}
+
+
+ and date_format(b.create_time,'%Y-%m-%d') <= #{createTimeEnd}
+
+
+
+
+ from execution_out_material_detail a
+ join execution_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
+
+
+
+
+ and a.material_code like concat('%', #{materialCode}, '%')
+
+
+ and a.material_name like concat('%', #{materialName}, '%')
+
+
+ GROUP BY a.material_code
+ order by salesQuantity 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
+
+
+
+
+ select
+ IFNULL(SUM(a.outbound_quantity), 0) AS totalSalesQuantity,
+ COUNT(DISTINCT a.out_order_number) AS totalTradeCount,
+ IFNULL(SUM(IFNULL(a.TOTAL_AMOUNT, 0)), 0) AS totalAmount
+
+
+
+
+ and a.material_code like concat('%', #{materialCode}, '%')
+
+
+ and a.material_name like concat('%', #{materialName}, '%')
+
+
+
+
+
+
+ select
+ IFNULL(SUM(a.outbound_quantity), 0) AS totalSalesQuantity,
+ COUNT(DISTINCT b.out_order_number) AS totalTradeCount,
+ IFNULL(SUM(IFNULL(a.TOTAL_AMOUNT, 0)), 0) AS totalAmount
+
+
+
+ and b.line_code is not null and b.line_code != ''
+
+
+
diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/inboundRank/InboundRankApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/inboundRank/InboundRankApplicationService.java
new file mode 100644
index 000000000..c5a18f4ff
--- /dev/null
+++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/inboundRank/InboundRankApplicationService.java
@@ -0,0 +1,76 @@
+package com.mhd.wms.application.service.inboundRank;
+
+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.domain.cache.AssociationWarehouseCacheDO;
+import com.mhd.system.api.domain.cache.SystemServiceCacheUtil;
+import com.mhd.system.api.model.LoginUser;
+import com.mhd.wms.domain.inboundRank.repository.po.InboundMaterialRankPO;
+import com.mhd.wms.domain.inboundRank.repository.po.InboundRankTotalPO;
+import com.mhd.wms.domain.inboundRank.repository.todo.InboundRankDO;
+import com.mhd.wms.domain.inboundRank.service.InboundRankDomainService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 入库排名统计应用服务
+ *
+ * 负责登录用户组织隔离注入、日期区间校验,查询逻辑在 InboundRankDomainService → InboundRankMapper.xml
+ *
+ * @author rcx
+ * @date 2026-08-31
+ */
+@Service
+@Slf4j
+public class InboundRankApplicationService {
+
+ @Autowired
+ private InboundRankDomainService inboundRankDomainService;
+
+ /**
+ * 分页查询商品入库排名列表(仓单+货品汇总,按件数降序)
+ */
+ public List queryMaterialRankList(InboundRankDO inboundRankDO) {
+ fillLoginContext(inboundRankDO);
+ return inboundRankDomainService.queryMaterialRankList(inboundRankDO);
+ }
+
+ /**
+ * 商品入库排名合计(当前筛选条件全量,不分页)
+ */
+ public InboundRankTotalPO queryMaterialRankTotal(InboundRankDO inboundRankDO) {
+ return inboundRankDomainService.queryMaterialRankTotal(inboundRankDO);
+ }
+
+ /**
+ * 导出商品入库排名(不分页全量)
+ */
+ public List exportMaterialRank(InboundRankDO inboundRankDO) {
+ fillLoginContext(inboundRankDO);
+ return inboundRankDomainService.queryMaterialRankList(inboundRankDO);
+ }
+
+ /**
+ * 注入登录用户组织隔离与关联仓库,并校验入仓日期区间必填
+ */
+ private void fillLoginContext(InboundRankDO inboundRankDO) {
+ if (StringUtils.isEmpty(inboundRankDO.getWarehouseDateStart()) || StringUtils.isEmpty(inboundRankDO.getWarehouseDateEnd())) {
+ throw new ServiceException("请选择统计日期区间");
+ }
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
+ if (topOrganizationId != null && topOrganizationId != 1) {
+ inboundRankDO.setTopOrganizationId(topOrganizationId);
+ }
+ AssociationWarehouseCacheDO associationWarehouseCacheDO = SystemServiceCacheUtil.getAssociationWarehouseCache(loginUser.getUserid());
+ if (associationWarehouseCacheDO != null && associationWarehouseCacheDO.getWarehouseId() != null) {
+ inboundRankDO.setWarehouseId(associationWarehouseCacheDO.getWarehouseId());
+ }
+ }
+ }
+}
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
new file mode 100644
index 000000000..3f6d4d267
--- /dev/null
+++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/outboundRank/OutboundRankApplicationService.java
@@ -0,0 +1,100 @@
+package com.mhd.wms.application.service.outboundRank;
+
+import com.mhd.common.core.utils.StringUtils;
+import com.mhd.common.core.exception.ServiceException;
+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.todo.OutboundRankDO;
+import com.mhd.wms.domain.outboundRank.service.OutboundRankDomainService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 出库排名统计应用服务
+ *
+ * 负责登录用户组织隔离注入、日期区间校验,统计逻辑在 OutboundRankDomainService → OutboundRankMapper.xml
+ *
+ * @author rcx
+ * @date 2026-08-31
+ */
+@Service
+@Slf4j
+public class OutboundRankApplicationService {
+
+ @Autowired
+ private OutboundRankDomainService outboundRankDomainService;
+
+ /**
+ * 分页查询商品出库排名列表
+ */
+ public List queryMaterialRankList(OutboundRankDO outboundRankDO) {
+ fillLoginContext(outboundRankDO);
+ return outboundRankDomainService.queryMaterialRankList(outboundRankDO);
+ }
+
+ /**
+ * 分页查询线路出库排名列表
+ */
+ public List queryLineRankList(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);
+ }
+
+ /**
+ * 注入登录用户组织隔离与关联仓库,并校验日期区间必填
+ */
+ private void fillLoginContext(OutboundRankDO outboundRankDO) {
+ if (StringUtils.isEmpty(outboundRankDO.getCreateTimeStart()) || StringUtils.isEmpty(outboundRankDO.getCreateTimeEnd())) {
+ throw new ServiceException("请选择统计日期区间");
+ }
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
+ if (topOrganizationId != null && topOrganizationId != 1) {
+ outboundRankDO.setTopOrganizationId(topOrganizationId);
+ }
+ AssociationWarehouseCacheDO associationWarehouseCacheDO = SystemServiceCacheUtil.getAssociationWarehouseCache(loginUser.getUserid());
+ if (associationWarehouseCacheDO != null && associationWarehouseCacheDO.getWarehouseId() != null) {
+ outboundRankDO.setWarehouseId(associationWarehouseCacheDO.getWarehouseId());
+ }
+ }
+ }
+}
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/facade/IInboundRankService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/facade/IInboundRankService.java
new file mode 100644
index 000000000..9559e2d5f
--- /dev/null
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/facade/IInboundRankService.java
@@ -0,0 +1,26 @@
+package com.mhd.wms.domain.inboundRank.repository.facade;
+
+import com.mhd.wms.domain.inboundRank.repository.po.InboundMaterialRankPO;
+import com.mhd.wms.domain.inboundRank.repository.po.InboundRankTotalPO;
+import com.mhd.wms.domain.inboundRank.repository.todo.InboundRankDO;
+
+import java.util.List;
+
+/**
+ * 入库排名统计Service接口
+ *
+ * @author rcx
+ * @date 2026-08-31
+ */
+public interface IInboundRankService {
+
+ /**
+ * 商品入库排名列表(仓单+货品汇总,按件数降序)
+ */
+ List queryMaterialRankList(InboundRankDO inboundRankDO);
+
+ /**
+ * 商品入库排名合计(不分页)
+ */
+ InboundRankTotalPO queryMaterialRankTotal(InboundRankDO inboundRankDO);
+}
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/mapper/InboundRankMapper.java b/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/mapper/InboundRankMapper.java
new file mode 100644
index 000000000..5c95d09fa
--- /dev/null
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/mapper/InboundRankMapper.java
@@ -0,0 +1,26 @@
+package com.mhd.wms.domain.inboundRank.repository.mapper;
+
+import com.mhd.wms.domain.inboundRank.repository.po.InboundMaterialRankPO;
+import com.mhd.wms.domain.inboundRank.repository.po.InboundRankTotalPO;
+import com.mhd.wms.domain.inboundRank.repository.todo.InboundRankDO;
+
+import java.util.List;
+
+/**
+ * 入库排名统计Mapper接口
+ *
+ * @author rcx
+ * @date 2026-08-31
+ */
+public interface InboundRankMapper {
+
+ /**
+ * 商品入库排名列表(仓单+货品汇总,按件数降序)
+ */
+ List queryMaterialRankList(InboundRankDO inboundRankDO);
+
+ /**
+ * 商品入库排名合计(不分页,当前筛选条件全量合计)
+ */
+ InboundRankTotalPO queryMaterialRankTotal(InboundRankDO inboundRankDO);
+}
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/persistence/InboundRankImpl.java b/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/persistence/InboundRankImpl.java
new file mode 100644
index 000000000..519b7cc13
--- /dev/null
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/persistence/InboundRankImpl.java
@@ -0,0 +1,34 @@
+package com.mhd.wms.domain.inboundRank.repository.persistence;
+
+import com.mhd.wms.domain.inboundRank.repository.facade.IInboundRankService;
+import com.mhd.wms.domain.inboundRank.repository.mapper.InboundRankMapper;
+import com.mhd.wms.domain.inboundRank.repository.po.InboundMaterialRankPO;
+import com.mhd.wms.domain.inboundRank.repository.po.InboundRankTotalPO;
+import com.mhd.wms.domain.inboundRank.repository.todo.InboundRankDO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 入库排名统计Service业务层处理
+ *
+ * @author rcx
+ * @date 2026-08-31
+ */
+@Service
+public class InboundRankImpl implements IInboundRankService {
+
+ @Autowired
+ private InboundRankMapper inboundRankMapper;
+
+ @Override
+ public List queryMaterialRankList(InboundRankDO inboundRankDO) {
+ return inboundRankMapper.queryMaterialRankList(inboundRankDO);
+ }
+
+ @Override
+ public InboundRankTotalPO queryMaterialRankTotal(InboundRankDO inboundRankDO) {
+ return inboundRankMapper.queryMaterialRankTotal(inboundRankDO);
+ }
+}
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/po/InboundMaterialRankPO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/po/InboundMaterialRankPO.java
new file mode 100644
index 000000000..03567787a
--- /dev/null
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/po/InboundMaterialRankPO.java
@@ -0,0 +1,79 @@
+package com.mhd.wms.domain.inboundRank.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(一行 = 某仓单内某货品的合计,按件数降序排名)
+ *
+ * 字段口径:入仓日期=入仓单入仓日期;仓单编号=入库单号;客户编号/存货人=入仓单货主;
+ * 件数/毛重/体积=仓单内该货品明细合计;毛重(吨)=明细总毛重KG/1000;
+ * 投保总额=货品档案保额(material_base_info.insure_amount,组内取MAX防多批次明细行重复累加)
+ *
+ * @author rcx
+ * @date 2026-08-31
+ */
+@Data
+@ApiModel(value = "入库排名统计对象", description = "入库排名统计响应对象")
+public class InboundMaterialRankPO implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("入仓日期")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "入仓日期", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date warehouseDate;
+
+ @ApiModelProperty("仓单编号(入库单号)")
+ @Excel(name = "仓单编号")
+ private String inOrderNumber;
+
+ @ApiModelProperty("客户编号")
+ @Excel(name = "客户编号")
+ private String shipperCode;
+
+ @ApiModelProperty("存货人(客户名称)")
+ @Excel(name = "存货人")
+ private String shipperName;
+
+ @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 pieceCount;
+
+ @ApiModelProperty("毛重(吨)(仓单内该货品合计,KG/1000)")
+ @Excel(name = "毛重(吨)")
+ private BigDecimal grossWeightTon;
+
+ @ApiModelProperty("投保总额(货品档案保额)")
+ @Excel(name = "投保总额")
+ private BigDecimal insureAmount;
+
+ @ApiModelProperty("体积(CBM)(仓单内该货品合计)")
+ @Excel(name = "体积(CBM)")
+ private BigDecimal totalVolume;
+}
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/po/InboundRankTotalPO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/po/InboundRankTotalPO.java
new file mode 100644
index 000000000..551bf25d4
--- /dev/null
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/po/InboundRankTotalPO.java
@@ -0,0 +1,39 @@
+package com.mhd.wms.domain.inboundRank.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/totalInsureAmount/totalVolume/totalOrderCount)
+ *
+ * @author rcx
+ * @date 2026-08-31
+ */
+@Data
+@ApiModel(value = "入库排名统计合计对象", description = "入库排名统计合计响应对象")
+public class InboundRankTotalPO implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("件数合计")
+ private BigDecimal totalPieceCount;
+
+ @ApiModelProperty("毛重(吨)合计")
+ private BigDecimal totalGrossWeightTon;
+
+ @ApiModelProperty("投保总额合计(各仓单+货品行保额之和)")
+ private BigDecimal totalInsureAmount;
+
+ @ApiModelProperty("体积(CBM)合计")
+ private BigDecimal totalVolume;
+
+ @ApiModelProperty("仓单数合计")
+ private Long totalOrderCount;
+}
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/todo/InboundRankDO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/todo/InboundRankDO.java
new file mode 100644
index 000000000..1cc725242
--- /dev/null
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/todo/InboundRankDO.java
@@ -0,0 +1,50 @@
+package com.mhd.wms.domain.inboundRank.repository.todo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 入库排名统计查询DO
+ *
+ * topOrganizationId / warehouseId 由服务端按登录用户注入,前端不传
+ *
+ * @author rcx
+ * @date 2026-08-31
+ */
+@Data
+public class InboundRankDO implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("入仓日期-开始 yyyy-MM-dd(必填)")
+ private String warehouseDateStart;
+
+ @ApiModelProperty("入仓日期-结束 yyyy-MM-dd(必填)")
+ private String warehouseDateEnd;
+
+ @ApiModelProperty("仓单编号/入库单号(模糊)")
+ private String inOrderNumber;
+
+ @ApiModelProperty("客户编号(模糊)")
+ private String shipperCode;
+
+ @ApiModelProperty("存货人/客户名称(模糊)")
+ private String shipperName;
+
+ @ApiModelProperty("商品货号(模糊)")
+ private String materialCode;
+
+ @ApiModelProperty("货名/商品名称(模糊)")
+ private String materialName;
+
+ @ApiModelProperty("仓库名称(模糊)")
+ private String warehouseName;
+
+ @ApiModelProperty("一级组织表ID(登录用户隔离,非1时注入)")
+ private Long topOrganizationId;
+
+ @ApiModelProperty("仓库id(按用户关联仓库注入)")
+ private Long warehouseId;
+}
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/service/InboundRankDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/service/InboundRankDomainService.java
new file mode 100644
index 000000000..53e948b61
--- /dev/null
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/service/InboundRankDomainService.java
@@ -0,0 +1,39 @@
+package com.mhd.wms.domain.inboundRank.service;
+
+import com.mhd.wms.domain.inboundRank.repository.facade.IInboundRankService;
+import com.mhd.wms.domain.inboundRank.repository.po.InboundMaterialRankPO;
+import com.mhd.wms.domain.inboundRank.repository.po.InboundRankTotalPO;
+import com.mhd.wms.domain.inboundRank.repository.todo.InboundRankDO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 入库排名统计领域服务
+ *
+ * @author rcx
+ * @date 2026-08-31
+ */
+@Service
+@Slf4j
+public class InboundRankDomainService {
+
+ @Autowired
+ private IInboundRankService inboundRankService;
+
+ /**
+ * 商品入库排名列表(仓单+货品汇总,按件数降序)
+ */
+ public List queryMaterialRankList(InboundRankDO inboundRankDO) {
+ return inboundRankService.queryMaterialRankList(inboundRankDO);
+ }
+
+ /**
+ * 商品入库排名合计(不分页)
+ */
+ public InboundRankTotalPO queryMaterialRankTotal(InboundRankDO inboundRankDO) {
+ return inboundRankService.queryMaterialRankTotal(inboundRankDO);
+ }
+}
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
new file mode 100644
index 000000000..81981ab4b
--- /dev/null
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/facade/IOutboundRankService.java
@@ -0,0 +1,37 @@
+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.todo.OutboundRankDO;
+
+import java.util.List;
+
+/**
+ * 出库排名统计Service接口
+ *
+ * @author rcx
+ * @date 2026-08-31
+ */
+public interface IOutboundRankService {
+
+ /**
+ * 商品出库排名列表
+ */
+ List queryMaterialRankList(OutboundRankDO outboundRankDO);
+
+ /**
+ * 线路出库排名列表
+ */
+ List queryLineRankList(OutboundRankDO outboundRankDO);
+
+ /**
+ * 商品出库排名合计(不分页)
+ */
+ OutboundRankTotalPO queryMaterialRankTotal(OutboundRankDO outboundRankDO);
+
+ /**
+ * 线路出库排名合计(不分页)
+ */
+ OutboundRankTotalPO queryLineRankTotal(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
new file mode 100644
index 000000000..40f17acc2
--- /dev/null
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/mapper/OutboundRankMapper.java
@@ -0,0 +1,37 @@
+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.todo.OutboundRankDO;
+
+import java.util.List;
+
+/**
+ * 出库排名统计Mapper接口
+ *
+ * @author rcx
+ * @date 2026-08-31
+ */
+public interface OutboundRankMapper {
+
+ /**
+ * 商品出库排名列表(按销售量倒序)
+ */
+ List queryMaterialRankList(OutboundRankDO outboundRankDO);
+
+ /**
+ * 线路出库排名列表(按销售量倒序)
+ */
+ List queryLineRankList(OutboundRankDO outboundRankDO);
+
+ /**
+ * 商品出库排名合计(不分页,当前筛选条件全量合计)
+ */
+ OutboundRankTotalPO queryMaterialRankTotal(OutboundRankDO outboundRankDO);
+
+ /**
+ * 线路出库排名合计(不分页,当前筛选条件全量合计)
+ */
+ OutboundRankTotalPO queryLineRankTotal(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
new file mode 100644
index 000000000..0acf88572
--- /dev/null
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/persistence/OutboundRankImpl.java
@@ -0,0 +1,45 @@
+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.todo.OutboundRankDO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 出库排名统计Service业务层处理
+ *
+ * @author rcx
+ * @date 2026-08-31
+ */
+@Service
+public class OutboundRankImpl implements IOutboundRankService {
+
+ @Autowired
+ private OutboundRankMapper outboundRankMapper;
+
+ @Override
+ public List queryMaterialRankList(OutboundRankDO outboundRankDO) {
+ return outboundRankMapper.queryMaterialRankList(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);
+ }
+}
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
new file mode 100644
index 000000000..7f5c05c3c
--- /dev/null
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundLineRankPO.java
@@ -0,0 +1,45 @@
+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
new file mode 100644
index 000000000..9725d50ab
--- /dev/null
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundMaterialRankPO.java
@@ -0,0 +1,52 @@
+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
new file mode 100644
index 000000000..ea0e9ace9
--- /dev/null
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundRankTotalPO.java
@@ -0,0 +1,32 @@
+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
new file mode 100644
index 000000000..c38c77230
--- /dev/null
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/todo/OutboundRankDO.java
@@ -0,0 +1,53 @@
+package com.mhd.wms.domain.outboundRank.repository.todo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 出库排名统计查询DO
+ *
+ * topOrganizationId / warehouseId 由服务端按登录用户注入,前端不传
+ *
+ * @author rcx
+ * @date 2026-08-31
+ */
+@Data
+public class OutboundRankDO implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("出库日期-开始 yyyy-MM-dd(必填)")
+ private String createTimeStart;
+
+ @ApiModelProperty("出库日期-结束 yyyy-MM-dd(必填)")
+ private String createTimeEnd;
+
+ @ApiModelProperty("商品货号(模糊)")
+ private String materialCode;
+
+ @ApiModelProperty("商品名称(模糊)")
+ private String materialName;
+
+ @ApiModelProperty("线路编码(模糊)")
+ private String lineCode;
+
+ @ApiModelProperty("线路名称(模糊)")
+ private String lineName;
+
+ @ApiModelProperty("仓库名称(模糊)")
+ private String warehouseName;
+
+ @ApiModelProperty("客户名称(模糊)")
+ private String customerName;
+
+ @ApiModelProperty("货主名称(模糊)")
+ private String shipperName;
+
+ @ApiModelProperty("一级组织表ID(登录用户隔离,非1时注入)")
+ private Long topOrganizationId;
+
+ @ApiModelProperty("仓库id(按用户关联仓库注入)")
+ private Long warehouseId;
+}
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
new file mode 100644
index 000000000..1d2fe84c2
--- /dev/null
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/service/OutboundRankDomainService.java
@@ -0,0 +1,54 @@
+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.todo.OutboundRankDO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 出库排名统计领域服务
+ *
+ * @author rcx
+ * @date 2026-08-31
+ */
+@Service
+@Slf4j
+public class OutboundRankDomainService {
+
+ @Autowired
+ private IOutboundRankService outboundRankService;
+
+ /**
+ * 商品出库排名列表
+ */
+ public List queryMaterialRankList(OutboundRankDO outboundRankDO) {
+ return outboundRankService.queryMaterialRankList(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);
+ }
+}
diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/assember/inboundRank/InboundRankAssembler.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/assember/inboundRank/InboundRankAssembler.java
new file mode 100644
index 000000000..f884e0715
--- /dev/null
+++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/assember/inboundRank/InboundRankAssembler.java
@@ -0,0 +1,36 @@
+package com.mhd.wms.interfaces.assember.inboundRank;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.mhd.common.core.exception.digitalLogisticsException.DigitalLogisticsException;
+import com.mhd.common.core.exception.digitalLogisticsException.UserError;
+import com.mhd.common.core.utils.IgnoreNullUtil;
+import com.mhd.common.core.utils.bean.BeanUtils;
+import com.mhd.common.security.utils.SecurityUtils;
+import com.mhd.system.api.model.LoginUser;
+import com.mhd.wms.domain.inboundRank.repository.todo.InboundRankDO;
+import com.mhd.wms.interfaces.dto.inboundRank.InboundRankDTO;
+import org.springframework.stereotype.Component;
+
+/**
+ * 入库排名统计Assembler
+ *
+ * @author rcx
+ * @date 2026-08-31
+ */
+@Component
+public class InboundRankAssembler {
+
+ /**
+ * 转换实体
+ */
+ public InboundRankDO toDO(InboundRankDTO inboundRankDTO) {
+ InboundRankDO inboundRankDO = new InboundRankDO();
+ // 拷贝
+ BeanUtils.copyProperties(inboundRankDTO, inboundRankDO, IgnoreNullUtil.getNullPropertyNames(inboundRankDTO));
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (ObjectUtil.isNull(loginUser)) {
+ throw new DigitalLogisticsException(UserError.TIMEOUT);
+ }
+ return inboundRankDO;
+ }
+}
diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/assember/outboundRank/OutboundRankAssembler.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/assember/outboundRank/OutboundRankAssembler.java
new file mode 100644
index 000000000..8388a919f
--- /dev/null
+++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/assember/outboundRank/OutboundRankAssembler.java
@@ -0,0 +1,36 @@
+package com.mhd.wms.interfaces.assember.outboundRank;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.mhd.common.core.exception.digitalLogisticsException.DigitalLogisticsException;
+import com.mhd.common.core.exception.digitalLogisticsException.UserError;
+import com.mhd.common.core.utils.IgnoreNullUtil;
+import com.mhd.common.core.utils.bean.BeanUtils;
+import com.mhd.common.security.utils.SecurityUtils;
+import com.mhd.system.api.model.LoginUser;
+import com.mhd.wms.domain.outboundRank.repository.todo.OutboundRankDO;
+import com.mhd.wms.interfaces.dto.outboundRank.OutboundRankDTO;
+import org.springframework.stereotype.Component;
+
+/**
+ * 出库排名统计Assembler
+ *
+ * @author rcx
+ * @date 2026-08-31
+ */
+@Component
+public class OutboundRankAssembler {
+
+ /**
+ * 转换实体
+ */
+ public OutboundRankDO toDO(OutboundRankDTO outboundRankDTO) {
+ OutboundRankDO outboundRankDO = new OutboundRankDO();
+ // 拷贝
+ BeanUtils.copyProperties(outboundRankDTO, outboundRankDO, IgnoreNullUtil.getNullPropertyNames(outboundRankDTO));
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (ObjectUtil.isNull(loginUser)) {
+ throw new DigitalLogisticsException(UserError.TIMEOUT);
+ }
+ return outboundRankDO;
+ }
+}
diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/inboundRank/InboundRankDTO.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/inboundRank/InboundRankDTO.java
new file mode 100644
index 000000000..e7c812636
--- /dev/null
+++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/inboundRank/InboundRankDTO.java
@@ -0,0 +1,45 @@
+package com.mhd.wms.interfaces.dto.inboundRank;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 入库排名统计入参DTO
+ *
+ * 按入仓日期区间筛选商品入库量统计排名,统计口径:入仓日期 + 仅已入库状态(5) + 明细仅取 level=1 主行;
+ * 一行 = 某仓单内某货品的合计,按件数降序排名
+ *
+ * @author rcx
+ * @date 2026-08-31
+ */
+@Data
+public class InboundRankDTO implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("入仓日期-开始 yyyy-MM-dd(必填,按入仓单入仓日期筛选)")
+ private String warehouseDateStart;
+
+ @ApiModelProperty("入仓日期-结束 yyyy-MM-dd(必填,按入仓单入仓日期筛选)")
+ private String warehouseDateEnd;
+
+ @ApiModelProperty("仓单编号/入库单号(模糊)")
+ private String inOrderNumber;
+
+ @ApiModelProperty("客户编号(模糊)")
+ private String shipperCode;
+
+ @ApiModelProperty("存货人/客户名称(模糊)")
+ private String shipperName;
+
+ @ApiModelProperty("商品货号(模糊)")
+ private String materialCode;
+
+ @ApiModelProperty("货名/商品名称(模糊)")
+ private String materialName;
+
+ @ApiModelProperty("仓库名称(模糊)")
+ private String warehouseName;
+}
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
new file mode 100644
index 000000000..eac2c07b5
--- /dev/null
+++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/outboundRank/OutboundRankDTO.java
@@ -0,0 +1,43 @@
+package com.mhd.wms.interfaces.dto.outboundRank;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 出库排名统计入参DTO
+ *
+ * 按日期区间统计商品/线路出库量排名,统计口径:出库单创建时间 + 已出库及之后状态(9,12,13)
+ *
+ * @author rcx
+ * @date 2026-08-31
+ */
+@Data
+public class OutboundRankDTO {
+
+ @ApiModelProperty("出库日期-开始 yyyy-MM-dd(必填,按出库单创建时间统计)")
+ private String createTimeStart;
+
+ @ApiModelProperty("出库日期-结束 yyyy-MM-dd(必填,按出库单创建时间统计)")
+ private String createTimeEnd;
+
+ @ApiModelProperty("商品货号(模糊)")
+ private String materialCode;
+
+ @ApiModelProperty("商品名称(模糊)")
+ private String materialName;
+
+ @ApiModelProperty("线路编码(模糊)")
+ private String lineCode;
+
+ @ApiModelProperty("线路名称(模糊)")
+ private String lineName;
+
+ @ApiModelProperty("仓库名称(模糊)")
+ private String warehouseName;
+
+ @ApiModelProperty("客户名称(模糊)")
+ private String customerName;
+
+ @ApiModelProperty("货主名称(模糊)")
+ private String shipperName;
+}
diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/inboundRank/InboundRankApi.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/inboundRank/InboundRankApi.java
new file mode 100644
index 000000000..b979e988b
--- /dev/null
+++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/inboundRank/InboundRankApi.java
@@ -0,0 +1,105 @@
+package com.mhd.wms.interfaces.facadeApi.inboundRank;
+
+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.wms.application.service.inboundRank.InboundRankApplicationService;
+import com.mhd.wms.domain.inboundRank.repository.po.InboundMaterialRankPO;
+import com.mhd.wms.domain.inboundRank.repository.po.InboundRankTotalPO;
+import com.mhd.wms.domain.inboundRank.repository.todo.InboundRankDO;
+import com.mhd.wms.interfaces.assember.inboundRank.InboundRankAssembler;
+import com.mhd.wms.interfaces.dto.inboundRank.InboundRankDTO;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * 入库排名统计Api
+ *
+ * 按入仓日期区间筛选商品入库量统计排名。统计口径:入仓日期 + 仅已入库状态(5),
+ * 明细仅取 level=1 主行;一行 = 某仓单内某货品的合计,按件数降序排名。
+ * 字段:入仓日期/仓单编号/客户编号/存货人/货名/件数/毛重(吨)/投保总额/体积(CBM)。
+ * 与出库排名(/outboundRankApi)配对,前端用 tab 页区分
+ *
+ * @author rcx
+ * @date 2026-08-31
+ */
+@RestController
+@RequestMapping("/inboundRankApi")
+public class InboundRankApi {
+
+ @Resource
+ private InboundRankAssembler inboundRankAssembler;
+
+ @Autowired
+ private InboundRankApplicationService inboundRankApplicationService;
+
+ /**
+ * 分页查询商品入库排名列表(含合计行)
+ */
+ @ApiOperation("分页查询商品入库排名列表")
+ @GetMapping("/queryMaterialRankList")
+ public HashMap queryMaterialRankList(InboundRankDTO inboundRankDTO) {
+ //转换实体
+ InboundRankDO inboundRankDO = inboundRankAssembler.toDO(inboundRankDTO);
+ startPage();
+ List list = inboundRankApplicationService.queryMaterialRankList(inboundRankDO);
+ InboundRankTotalPO total = inboundRankApplicationService.queryMaterialRankTotal(inboundRankDO);
+ return getDataTableWithTotal(list, total);
+ }
+
+ /**
+ * 导出商品入库排名Excel
+ */
+ @ApiOperation("导出商品入库排名Excel")
+ @GetMapping("/exportMaterialRank")
+ public void exportMaterialRank(HttpServletResponse response, InboundRankDTO inboundRankDTO) throws Exception {
+ //转换实体(不分页,导出全量)
+ InboundRankDO inboundRankDO = inboundRankAssembler.toDO(inboundRankDTO);
+ List list = inboundRankApplicationService.exportMaterialRank(inboundRankDO);
+
+ 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<>(InboundMaterialRankPO.class);
+ util.exportExcel(response, list, "入库排名统计");
+ }
+
+ /**
+ * 分页结果 + 合计行:data/total/code/msg 之外追加
+ * totalPieceCount/totalGrossWeightTon/totalInsureAmount/totalVolume/totalOrderCount
+ */
+ private HashMap getDataTableWithTotal(List> list, InboundRankTotalPO 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("totalPieceCount", total.getTotalPieceCount());
+ result.put("totalGrossWeightTon", total.getTotalGrossWeightTon());
+ result.put("totalInsureAmount", total.getTotalInsureAmount());
+ result.put("totalVolume", total.getTotalVolume());
+ result.put("totalOrderCount", total.getTotalOrderCount());
+ }
+ return result;
+ }
+
+ /**
+ * 设置请求分页数据
+ */
+ protected void startPage() {
+ PageUtils.startPage();
+ }
+}
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
new file mode 100644
index 000000000..439dbba78
--- /dev/null
+++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/outboundRank/OutboundRankApi.java
@@ -0,0 +1,134 @@
+package com.mhd.wms.interfaces.facadeApi.outboundRank;
+
+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.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.todo.OutboundRankDO;
+import com.mhd.wms.interfaces.assember.outboundRank.OutboundRankAssembler;
+import com.mhd.wms.interfaces.dto.outboundRank.OutboundRankDTO;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * 出库排名统计Api
+ *
+ * 按日期区间筛选,统计商品/线路出库量排名。统计口径:出库单创建时间 + 已出库及之后状态(9,12,13),
+ * 明细仅取 level=1 主行;销售量=SUM(出库数量)、交易数=COUNT(DISTINCT 出库单号)、金额=SUM(明细总价)
+ *
+ * @author rcx
+ * @date 2026-08-31
+ */
+@RestController
+@RequestMapping("/outboundRankApi")
+public class OutboundRankApi {
+
+ @Resource
+ private OutboundRankAssembler outboundRankAssembler;
+
+ @Autowired
+ private OutboundRankApplicationService outboundRankApplicationService;
+
+ /**
+ * 分页查询商品出库排名列表(含合计行)
+ */
+ @ApiOperation("分页查询商品出库排名列表")
+ @GetMapping("/queryMaterialRankList")
+ public HashMap queryMaterialRankList(OutboundRankDTO outboundRankDTO) {
+ //转换实体
+ OutboundRankDO outboundRankDO = outboundRankAssembler.toDO(outboundRankDTO);
+ startPage();
+ List list = outboundRankApplicationService.queryMaterialRankList(outboundRankDO);
+ OutboundRankTotalPO total = outboundRankApplicationService.queryMaterialRankTotal(outboundRankDO);
+ return getDataTableWithTotal(list, total);
+ }
+
+ /**
+ * 分页查询线路出库排名列表(含合计行)
+ */
+ @ApiOperation("分页查询线路出库排名列表")
+ @GetMapping("/queryLineRankList")
+ public HashMap queryLineRankList(OutboundRankDTO outboundRankDTO) {
+ //转换实体
+ OutboundRankDO outboundRankDO = outboundRankAssembler.toDO(outboundRankDTO);
+ startPage();
+ List list = outboundRankApplicationService.queryLineRankList(outboundRankDO);
+ OutboundRankTotalPO total = outboundRankApplicationService.queryLineRankTotal(outboundRankDO);
+ return getDataTableWithTotal(list, total);
+ }
+
+ /**
+ * 导出商品出库排名Excel
+ */
+ @ApiOperation("导出商品出库排名Excel")
+ @GetMapping("/exportMaterialRank")
+ public void exportMaterialRank(HttpServletResponse response, OutboundRankDTO outboundRankDTO) throws Exception {
+ //转换实体(不分页,导出全量)
+ OutboundRankDO outboundRankDO = outboundRankAssembler.toDO(outboundRankDTO);
+ List list = outboundRankApplicationService.exportMaterialRankList(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);
+ util.exportExcel(response, list, "商品出库排名");
+ }
+
+ /**
+ * 导出线路出库排名Excel
+ */
+ @ApiOperation("导出线路出库排名Excel")
+ @GetMapping("/exportLineRank")
+ public void exportLineRank(HttpServletResponse response, OutboundRankDTO outboundRankDTO) throws Exception {
+ //转换实体(不分页,导出全量)
+ OutboundRankDO outboundRankDO = outboundRankAssembler.toDO(outboundRankDTO);
+ List list = outboundRankApplicationService.exportLineRankList(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);
+ util.exportExcel(response, list, "线路出库排名");
+ }
+
+ /**
+ * 分页结果 + 合计行:data/total/code/msg 之外追加 totalSalesQuantity/totalTradeCount/totalAmount
+ */
+ private HashMap getDataTableWithTotal(List> list, OutboundRankTotalPO 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());
+ }
+ return result;
+ }
+
+ /**
+ * 设置请求分页数据
+ */
+ protected void startPage() {
+ PageUtils.startPage();
+ }
+}
diff --git a/mhd_wms/src/main/resources/mapper/inboundRank/InboundRankMapper.xml b/mhd_wms/src/main/resources/mapper/inboundRank/InboundRankMapper.xml
new file mode 100644
index 000000000..fc1e6f238
--- /dev/null
+++ b/mhd_wms/src/main/resources/mapper/inboundRank/InboundRankMapper.xml
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+ a.del_flag = 1
+ and a.level = 1
+ and b.status = 5
+
+ and b.top_organization_id = #{topOrganizationId}
+
+
+ and b.warehouse_id = #{warehouseId}
+
+
+ and b.warehouse_name like concat('%', #{warehouseName}, '%')
+
+
+ and b.in_order_number like concat('%', #{inOrderNumber}, '%')
+
+
+ and b.shipper_code like concat('%', #{shipperCode}, '%')
+
+
+ and b.shipper_name like concat('%', #{shipperName}, '%')
+
+
+ and a.material_code like concat('%', #{materialCode}, '%')
+
+
+ and a.material_name like concat('%', #{materialName}, '%')
+
+
+ and date_format(b.warehouse_date,'%Y-%m-%d') >= #{warehouseDateStart}
+
+
+ and date_format(b.warehouse_date,'%Y-%m-%d') <= #{warehouseDateEnd}
+
+
+
+
+ from in_material_detail a
+ join stock_in_order b on a.in_order_number = b.in_order_number and b.del_flag = 1
+ left join material_base_info c on a.material_base_info_id = c.material_base_info_id
+
+
+
+
+ select
+ MAX(b.warehouse_date) AS warehouseDate,
+ b.in_order_number AS inOrderNumber,
+ MAX(b.shipper_code) AS shipperCode,
+ MAX(b.shipper_name) AS shipperName,
+ 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.PIECE_COUNT), 0) AS pieceCount,
+ ROUND(IFNULL(SUM(a.TOTAL_GROSS_WEIGHT), 0) / 1000, 3) AS grossWeightTon,
+ MAX(IFNULL(c.insure_amount, 0)) AS insureAmount,
+ IFNULL(SUM(a.TOTAL_VOLUME), 0) AS totalVolume
+
+
+
+
+ GROUP BY b.in_order_number, a.material_code
+ order by pieceCount desc, warehouseDate desc, inOrderNumber desc
+
+
+
+
+ select
+ IFNULL(SUM(t.pieceCount), 0) AS totalPieceCount,
+ ROUND(IFNULL(SUM(t.grossWeightKG), 0) / 1000, 3) AS totalGrossWeightTon,
+ IFNULL(SUM(t.insureAmount), 0) AS totalInsureAmount,
+ IFNULL(SUM(t.totalVolume), 0) AS totalVolume,
+ COUNT(DISTINCT t.inOrderNumber) AS totalOrderCount
+ from (
+ select
+ b.in_order_number AS inOrderNumber,
+ IFNULL(SUM(a.PIECE_COUNT), 0) AS pieceCount,
+ IFNULL(SUM(a.TOTAL_GROSS_WEIGHT), 0) AS grossWeightKG,
+ MAX(IFNULL(c.insure_amount, 0)) AS insureAmount,
+ IFNULL(SUM(a.TOTAL_VOLUME), 0) AS totalVolume
+
+
+
+
+ GROUP BY b.in_order_number, a.material_code
+ ) t
+
+
diff --git a/mhd_wms/src/main/resources/mapper/outboundRank/OutboundRankMapper.xml b/mhd_wms/src/main/resources/mapper/outboundRank/OutboundRankMapper.xml
new file mode 100644
index 000000000..54aa7458b
--- /dev/null
+++ b/mhd_wms/src/main/resources/mapper/outboundRank/OutboundRankMapper.xml
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+ a.del_flag = 1
+ and a.level = 1
+ and b.status in (9, 12, 13)
+
+ and b.top_organization_id = #{topOrganizationId}
+
+
+ and b.warehouse_id = #{warehouseId}
+
+
+ and b.warehouse_name like concat('%', #{warehouseName}, '%')
+
+
+ and b.customer_name like concat('%', #{customerName}, '%')
+
+
+ and b.shipper_name like concat('%', #{shipperName}, '%')
+
+
+ and b.line_code like concat('%', #{lineCode}, '%')
+
+
+ and b.line_name like concat('%', #{lineName}, '%')
+
+
+ and date_format(b.create_time,'%Y-%m-%d') >= #{createTimeStart}
+
+
+ and date_format(b.create_time,'%Y-%m-%d') <= #{createTimeEnd}
+
+
+
+
+ from out_material_detail a
+ 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
+
+
+
+
+ and a.material_code like concat('%', #{materialCode}, '%')
+
+
+ and a.material_name like concat('%', #{materialName}, '%')
+
+
+ GROUP BY a.material_code
+ order by salesQuantity 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
+
+
+
+
+ select
+ IFNULL(SUM(a.outbound_quantity), 0) AS totalSalesQuantity,
+ COUNT(DISTINCT a.out_order_number) AS totalTradeCount,
+ IFNULL(SUM(IFNULL(a.TOTAL_AMOUNT, 0)), 0) AS totalAmount
+
+
+
+
+ and a.material_code like concat('%', #{materialCode}, '%')
+
+
+ and a.material_name like concat('%', #{materialName}, '%')
+
+
+
+
+
+
+ select
+ IFNULL(SUM(a.outbound_quantity), 0) AS totalSalesQuantity,
+ COUNT(DISTINCT b.out_order_number) AS totalTradeCount,
+ IFNULL(SUM(IFNULL(a.TOTAL_AMOUNT, 0)), 0) AS totalAmount
+
+
+
+ and b.line_code is not null and b.line_code != ''
+
+
+
From 1300a4e1f8e93cbc2e6c01104091d0d6a24a7547 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Tue, 1 Sep 2026 09:10:59 +0800
Subject: [PATCH 25/87] =?UTF-8?q?fix(oms)=EF=BC=9A=E5=87=BA=E5=BA=93?=
=?UTF-8?q?=E6=8E=92=E5=90=8DOMS=E7=AB=AF=E6=95=B0=E6=8D=AE=E6=BA=90?=
=?UTF-8?q?=E6=94=B9=E4=B8=BA=E8=B7=A8=E5=BA=93=E6=9F=A5WMS=E5=87=BA?=
=?UTF-8?q?=E5=BA=93=E8=A1=A8=EF=BC=8C=E4=BF=AE=E5=A4=8D=E6=9F=A5=E8=AF=A2?=
=?UTF-8?q?=E7=BB=93=E6=9E=9C=E6=81=92=E4=B8=BA=E7=A9=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
OMS库出库单状态从不流转(预约/执行单全部status=1,无"已出库"数据),原SQL按执行出库单status=9过滤导致查不出任何数据;改为跨库取WMS出库表NGWL_TEST_WMS.stock_out_order/out_material_detail(与OMS库存查询跨库join material_base_info同一模式),口径与WMS端/outboundRankApi完全一致:已出库及之后状态(9,12,13)+明细level=1主行+按出库单创建时间筛选,两边页面数字一致;接口路径/参数/返回结构均不变,其余文件仅更新注释中的数据源说明
---
.../po/ExecutionOutboundLineRankPO.java | 2 +-
.../po/ExecutionOutboundMaterialRankPO.java | 2 +-
.../todo/ExecutionOutboundRankDTO.java | 7 ++--
...ecutionOutboundRankApplicationService.java | 2 +-
.../ExecutionOutboundRankApi.java | 7 +++-
.../ExecutionOutboundRankMapper.xml | 37 +++++++++----------
6 files changed, 29 insertions(+), 28 deletions(-)
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
index 607e789c6..974944f90 100644
--- 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
@@ -11,7 +11,7 @@ import java.math.BigDecimal;
/**
* 线路出库排名PO
*
- * 按日期区间对执行出库单聚合:销售量=SUM(出库数量),交易数=COUNT(DISTINCT 出库单号),金额=SUM(明细总价);
+ *
按日期区间对出库单聚合:销售量=SUM(出库数量),交易数=COUNT(DISTINCT 出库单号),金额=SUM(明细总价);
* 仅统计带线路的出库单(line_code 为 2026-08-20 新增冗余字段,历史单为空)
*
* @author rcx
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
index ce1cb867e..c32046d9f 100644
--- 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
@@ -11,7 +11,7 @@ import java.math.BigDecimal;
/**
* 商品出库排名PO
*
- * 按日期区间对执行出库明细聚合:销售量=SUM(出库数量),交易数=COUNT(DISTINCT 出库单号),金额=SUM(明细总价)
+ * 按日期区间对出库明细聚合:销售量=SUM(出库数量),交易数=COUNT(DISTINCT 出库单号),金额=SUM(明细总价)
*
* @author rcx
* @date 2026-08-31
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 9b055286f..0637173b7 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
@@ -8,7 +8,8 @@ import java.io.Serializable;
/**
* 出库排名统计入参DTO
*
- * 按日期区间统计商品/线路出库量排名,数据源为 OMS 执行出库链路(execution_out_material_detail / execution_stock_out_order)
+ * 按日期区间统计商品/线路出库量排名。OMS 库出库单状态不流转(无"已出库"数据),
+ * 数据源跨库取 WMS 库出库表(NGWL_TEST_WMS.stock_out_order / out_material_detail),与 WMS 端 /outboundRankApi 同口径
*
* @author rcx
* @date 2026-08-31
@@ -16,10 +17,10 @@ import java.io.Serializable;
@Data
public class ExecutionOutboundRankDTO {
- @ApiModelProperty("出库日期-开始 yyyy-MM-dd(必填,按执行出库单创建时间统计)")
+ @ApiModelProperty("出库日期-开始 yyyy-MM-dd(必填,按出库单创建时间统计)")
private String createTimeStart;
- @ApiModelProperty("出库日期-结束 yyyy-MM-dd(必填,按执行出库单创建时间统计)")
+ @ApiModelProperty("出库日期-结束 yyyy-MM-dd(必填,按出库单创建时间统计)")
private String createTimeEnd;
@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 ef14d18bc..158f2b8c2 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
@@ -17,7 +17,7 @@ import java.util.List;
/**
* 出库排名统计应用服务
*
- * 负责登录用户组织隔离注入、日期区间校验,统计逻辑在 ExecutionOutboundRankDomainService → ExecutionOutboundRankMapper.xml
+ * 负责登录用户组织隔离注入、日期区间校验,统计逻辑在 ExecutionOutboundRankDomainService → ExecutionOutboundRankMapper.xml(跨库取 WMS 出库数据)
*
* @author rcx
* @date 2026-08-31
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 07cb22725..f1222e413 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
@@ -27,8 +27,11 @@ import java.util.List;
/**
* 出库排名统计Api
*
- * 按日期区间筛选,统计商品/线路出库量排名。统计口径:执行出库单创建时间 + 已出库状态(9),
- * 明细仅取 level=1 主行;销售量=SUM(出库数量)、交易数=COUNT(DISTINCT 出库单号)、金额=SUM(明细总价)
+ * 按日期区间筛选,统计商品/线路出库量排名。OMS 库出库单状态不流转(无"已出库"数据),
+ * 数据源跨库取 WMS 库出库表(NGWL_TEST_WMS.stock_out_order / out_material_detail),
+ * 口径与 WMS 端 /outboundRankApi 完全一致,两边数字一致;
+ * 统计条件:出库单创建时间 + 已出库及之后状态(9,12,13),明细仅取 level=1 主行;
+ * 销售量=SUM(出库数量)、交易数=COUNT(DISTINCT 出库单号)、金额=SUM(明细总价)
*
* @author rcx
* @date 2026-08-31
diff --git a/mhd_oms/src/main/resources/mapper/outboundRank/ExecutionOutboundRankMapper.xml b/mhd_oms/src/main/resources/mapper/outboundRank/ExecutionOutboundRankMapper.xml
index 77fccdc12..f35689979 100644
--- a/mhd_oms/src/main/resources/mapper/outboundRank/ExecutionOutboundRankMapper.xml
+++ b/mhd_oms/src/main/resources/mapper/outboundRank/ExecutionOutboundRankMapper.xml
@@ -5,16 +5,19 @@
a.del_flag = 1
and a.level = 1
- and b.del_flag = 1
- and b.status = 9
+ and b.status in (9, 12, 13)
and b.top_organization_id = #{topOrganizationId}
@@ -33,6 +36,12 @@
and b.line_name like concat('%', #{lineName}, '%')
+
+ and a.material_code like concat('%', #{materialCode}, '%')
+
+
+ and a.material_name like concat('%', #{materialName}, '%')
+
and date_format(b.create_time,'%Y-%m-%d') >= #{createTimeStart}
@@ -42,8 +51,8 @@
- from execution_out_material_detail a
- join execution_stock_out_order b on a.out_order_number = b.out_order_number and b.del_flag = 1
+ from NGWL_TEST_WMS.out_material_detail a
+ join NGWL_TEST_WMS.stock_out_order b on a.out_order_number = b.out_order_number and b.del_flag = 1
@@ -60,12 +69,6 @@
-
- and a.material_code like concat('%', #{materialCode}, '%')
-
-
- and a.material_name like concat('%', #{materialName}, '%')
-
GROUP BY a.material_code
order by salesQuantity desc
@@ -99,12 +102,6 @@
-
- and a.material_code like concat('%', #{materialCode}, '%')
-
-
- and a.material_name like concat('%', #{materialName}, '%')
-
From a588264849a049eb1620f264ae957d4bb6e0c0bd Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Tue, 1 Sep 2026 09:24:20 +0800
Subject: [PATCH 26/87] =?UTF-8?q?fix(wms,oms)=EF=BC=9A=E5=85=A5=E5=BA=93?=
=?UTF-8?q?=E6=8E=92=E5=90=8D=E7=BB=9F=E8=AE=A1=E6=9F=A5=E8=AF=A2=E6=81=92?=
=?UTF-8?q?=E4=B8=BA=E7=A9=BA=E4=BF=AE=E5=A4=8D=EF=BC=9AOMS=E6=89=A7?=
=?UTF-8?q?=E8=A1=8C=E5=85=A5=E5=BA=93=E5=8D=95=E7=8A=B6=E6=80=81=E4=B8=8D?=
=?UTF-8?q?=E5=9B=9E=E4=BC=A0(=E5=85=A8=E5=81=9Cstatus=3D1)=E6=97=A0?=
=?UTF-8?q?=E6=B3=95=E6=8C=89=E5=B7=B2=E5=85=A5=E5=BA=93=E8=BF=87=E6=BB=A4?=
=?UTF-8?q?=EF=BC=8C=E6=94=B9=E4=B8=BA=E4=BB=85=E6=8E=92=E9=99=A4=E5=B7=B2?=
=?UTF-8?q?=E5=8F=96=E6=B6=88(6)/=E5=B7=B2=E5=85=B3=E9=97=AD(7)(=E4=B8=8E?=
=?UTF-8?q?=E5=85=A5=E5=BA=93=E6=98=8E=E7=BB=86=E6=9F=A5=E8=AF=A2=E9=A1=B5?=
=?UTF-8?q?=E5=8F=A3=E5=BE=84=E4=B8=80=E8=87=B4)=EF=BC=9B=E5=85=A5?=
=?UTF-8?q?=E4=BB=93=E6=97=A5=E6=9C=9F=E4=B8=BA=E7=A9=BA=E7=9A=84=E5=8E=86?=
=?UTF-8?q?=E5=8F=B2=E5=8D=95=E7=AD=9B=E9=80=89=E4=B8=8E=E5=B1=95=E7=A4=BA?=
=?UTF-8?q?=E5=9D=87=E5=85=9C=E5=BA=95=E5=BB=BA=E6=A1=A3=E6=97=B6=E9=97=B4?=
=?UTF-8?q?create=5Ftime(=E4=B8=8E=E5=87=BA=E5=BA=93=E6=98=8E=E7=BB=86?=
=?UTF-8?q?=E7=BB=9F=E8=AE=A1=E5=8F=A3=E5=BE=84=E4=B8=80=E8=87=B4)?=
=?UTF-8?q?=EF=BC=9BWMS=E4=BB=8D=E4=BF=9D=E6=8C=81=E4=BB=85=E5=B7=B2?=
=?UTF-8?q?=E5=85=A5=E5=BA=93(5)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../facade/inboundRank/ExecutionInboundRankApi.java | 5 +++--
.../inboundRank/ExecutionInboundRankMapper.xml | 13 +++++++------
.../facadeApi/inboundRank/InboundRankApi.java | 2 +-
.../mapper/inboundRank/InboundRankMapper.xml | 8 ++++----
4 files changed, 15 insertions(+), 13 deletions(-)
diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/inboundRank/ExecutionInboundRankApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/inboundRank/ExecutionInboundRankApi.java
index 9ff29be10..b7cfd6391 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/inboundRank/ExecutionInboundRankApi.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/inboundRank/ExecutionInboundRankApi.java
@@ -26,8 +26,9 @@ import java.util.List;
/**
* 入库排名统计Api
*
- * 按入仓日期区间筛选商品入库量统计排名。统计口径:入仓日期 + 仅已入库状态(5),
- * 明细仅取 level=1 主行;一行 = 某仓单内某货品的合计,按件数降序排名。
+ *
按入仓日期区间筛选商品入库量统计排名。统计口径:入仓日期(为空的历史单按建档时间兜底);
+ * OMS 执行入库单状态不回传(长期停留已创建),不按"已入库"过滤,仅排除已取消(6)/已关闭(7),
+ * 与入库明细查询页面口径一致;明细仅取 level=1 主行;一行 = 某仓单内某货品的合计,按件数降序排名。
* 字段:入仓日期/仓单编号/客户编号/存货人/货名/件数/毛重(吨)/投保总额/体积(CBM)。
* 与出库排名(/executionOutboundRankApi)配对,前端用 tab 页区分
*
diff --git a/mhd_oms/src/main/resources/mapper/inboundRank/ExecutionInboundRankMapper.xml b/mhd_oms/src/main/resources/mapper/inboundRank/ExecutionInboundRankMapper.xml
index 46c335671..0401cc603 100644
--- a/mhd_oms/src/main/resources/mapper/inboundRank/ExecutionInboundRankMapper.xml
+++ b/mhd_oms/src/main/resources/mapper/inboundRank/ExecutionInboundRankMapper.xml
@@ -8,15 +8,16 @@
入库排名统计公共查询条件(OMS 执行入库链路)
数据源:执行入库明细 execution_in_material_detail(a,仅 level=1 主行防重复) join 执行入仓单 execution_stock_in_order(b)
left join NGWL_TEST_WMS.material_base_info(c,跨库取货品档案保额作投保总额)
- 口径:b.status = 5已入库(OMS 入库状态枚举 1~7,排除已取消(6)/已关闭(7)及未完成单据);
- 日期筛选按执行入仓单入仓日期 b.warehouse_date(与列表"入仓日期"列同源);
+ 口径:b.status not in (6已取消,7已关闭)(OMS 执行入库单状态不回传,实际数据长期停留 status=1已创建,
+ 无法按"已入库5"过滤,与入库明细查询页面口径一致不按状态筛选,仅排除已取消/已关闭);
+ 日期筛选按执行入仓单入仓日期 b.warehouse_date(与列表"入仓日期"列同源,为空的历史单按建档时间兜底);
一行 = 某仓单(b.in_order_number)内某货品(a.material_code)的合计,按件数降序排名
-->
a.del_flag = 1
and a.level = 1
and b.del_flag = 1
- and b.status = 5
+ and b.status not in (6, 7)
and b.top_organization_id = #{topOrganizationId}
@@ -39,10 +40,10 @@
and a.material_name like concat('%', #{materialName}, '%')
- and date_format(b.warehouse_date,'%Y-%m-%d') >= #{warehouseDateStart}
+ and date_format(IFNULL(b.warehouse_date, b.create_time),'%Y-%m-%d') >= #{warehouseDateStart}
- and date_format(b.warehouse_date,'%Y-%m-%d') <= #{warehouseDateEnd}
+ and date_format(IFNULL(b.warehouse_date, b.create_time),'%Y-%m-%d') <= #{warehouseDateEnd}
@@ -56,7 +57,7 @@
select
- MAX(b.warehouse_date) AS warehouseDate,
+ IFNULL(MAX(b.warehouse_date), MAX(b.create_time)) AS warehouseDate,
b.in_order_number AS inOrderNumber,
MAX(b.shipper_code) AS shipperCode,
MAX(b.shipper_name) AS shipperName,
diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/inboundRank/InboundRankApi.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/inboundRank/InboundRankApi.java
index b979e988b..15b0843ce 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/inboundRank/InboundRankApi.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/inboundRank/InboundRankApi.java
@@ -25,7 +25,7 @@ import java.util.List;
/**
* 入库排名统计Api
*
- * 按入仓日期区间筛选商品入库量统计排名。统计口径:入仓日期 + 仅已入库状态(5),
+ *
按入仓日期区间筛选商品入库量统计排名。统计口径:入仓日期(为空的历史单按建档时间兜底) + 仅已入库状态(5),
* 明细仅取 level=1 主行;一行 = 某仓单内某货品的合计,按件数降序排名。
* 字段:入仓日期/仓单编号/客户编号/存货人/货名/件数/毛重(吨)/投保总额/体积(CBM)。
* 与出库排名(/outboundRankApi)配对,前端用 tab 页区分
diff --git a/mhd_wms/src/main/resources/mapper/inboundRank/InboundRankMapper.xml b/mhd_wms/src/main/resources/mapper/inboundRank/InboundRankMapper.xml
index fc1e6f238..45f454d58 100644
--- a/mhd_wms/src/main/resources/mapper/inboundRank/InboundRankMapper.xml
+++ b/mhd_wms/src/main/resources/mapper/inboundRank/InboundRankMapper.xml
@@ -9,7 +9,7 @@
数据源:入库明细 in_material_detail(a,仅 level=1 主行防重复) join 入仓单 stock_in_order(b)
left join 货品档案 material_base_info(c,取保额作投保总额)
口径:b.status = 5已入库(排除已取消(6)/已关闭(7)及未完成单据);
- 日期筛选按入仓单入仓日期 b.warehouse_date(与列表"入仓日期"列同源);
+ 日期筛选按入仓单入仓日期 b.warehouse_date(与列表"入仓日期"列同源,为空的历史单按建档时间兜底);
一行 = 某仓单(b.in_order_number)内某货品(a.material_code)的合计,按件数降序排名
-->
@@ -41,10 +41,10 @@
and a.material_name like concat('%', #{materialName}, '%')
- and date_format(b.warehouse_date,'%Y-%m-%d') >= #{warehouseDateStart}
+ and date_format(IFNULL(b.warehouse_date, b.create_time),'%Y-%m-%d') >= #{warehouseDateStart}
- and date_format(b.warehouse_date,'%Y-%m-%d') <= #{warehouseDateEnd}
+ and date_format(IFNULL(b.warehouse_date, b.create_time),'%Y-%m-%d') <= #{warehouseDateEnd}
@@ -58,7 +58,7 @@
select
- MAX(b.warehouse_date) AS warehouseDate,
+ IFNULL(MAX(b.warehouse_date), MAX(b.create_time)) AS warehouseDate,
b.in_order_number AS inOrderNumber,
MAX(b.shipper_code) AS shipperCode,
MAX(b.shipper_name) AS shipperName,
From bb3ca932d25147177f6abcf46a44de5c96f64fae Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Tue, 1 Sep 2026 09:53:51 +0800
Subject: [PATCH 27/87] =?UTF-8?q?feat(oms):=E5=87=BA=E5=85=A5=E5=BA=93?=
=?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=AD=98=E5=9C=A8=E6=80=A7=E6=A0=A1=E9=AA=8C?=
=?UTF-8?q?=E6=94=B9=E4=B8=BA=E6=94=B6=E9=9B=86=E5=90=8E=E7=BB=9F=E4=B8=80?=
=?UTF-8?q?=E6=8F=90=E7=A4=BA(=E7=89=A9=E6=96=99+=E5=AE=A2=E6=88=B7?=
=?UTF-8?q?=E4=B8=8D=E5=AD=98=E5=9C=A8=E7=9A=84=E7=BC=96=E5=8F=B7=E4=B8=80?=
=?UTF-8?q?=E6=9D=A1=E6=B6=88=E6=81=AF=E5=B8=A6=E5=85=A8)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
调整2d1e4b59引入的校验流程(入库parseStockInExcel/出库parseExcelFile统一):
1. 第一步:物料编号存在性校验——逐编号查库,全部不存在的收集到missingMaterials,不立即报错
2. 第二步:客户编号存在性校验——逐编号查库,全部不存在的收集到missingCustomers,不立即报错
3. 第三步:两步全部完成后统一抛出提示,避免修完物料问题重导一次才暴露客户问题:
只缺物料:"物料[A、B]不存在,请先维护物料信息,维护完成后重新导入"
只缺客户:"客户[C]不存在,请先维护客户信息,维护完成后重新导入"
都缺:"物料[A、B]不存在,请先维护物料信息;客户[C、D]不存在,请先维护客户信息,维护完成后重新导入"
4. 存在性全部通过后才继续多货主/多客户编号/客户与货主一致性等校验及建单;
入库"多个客户编号"校验相应移到存在性之后,多个编号中缺哪个报哪个
5. 入库客户查询结果存入customerCache复用,一致性校验不再二次查库
漏填编号(空白行)仍即时报错,不属于存在性问题,行为不变
---
.../ReservationStockInOrderImpl.java | 95 ++++++++++++-------
1 file changed, 62 insertions(+), 33 deletions(-)
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java
index 2503b839f..20176fe04 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java
@@ -259,7 +259,7 @@ public class ReservationStockInOrderImpl extends ServiceImpl> shipperIds = new ArrayList<>();
Set processedShipperIds = new HashSet<>();
- // ====== 物料存在性校验(落库前):查询结果为空说明库中没有该物料,收集全部缺失料号后一次性提示维护 ======
+ // ====== 第一步:物料编号存在性校验(落库前,先收集全部缺失编号,不立即报错) ======
Map materialCache = new LinkedHashMap<>();
List missingMaterials = new ArrayList<>();
for (ProductDetail productDetail : productDetailList) {
@@ -277,21 +277,10 @@ public class ReservationStockInOrderImpl extends ServiceImpl shipper = new HashMap<>();
- shipper.put("shipperId", materialBaseInfoPO.getShipperId());
- shipper.put("shipperName", materialBaseInfoPO.getShipperName());
- shipper.put("shipperCode", materialBaseInfoPO.getShipperCode());
- shipperIds.add(shipper);
- }
- }
- // ====== 客户存在性校验(落库前):客户编号在库中查询结果为空说明客户不存在,提示维护后再导入 ======
+ // ====== 第二步:客户编号存在性校验(落库前,先收集全部缺失编号,不立即报错) ======
Map customerCache = new HashMap<>();
+ List missingCustomers = new ArrayList<>();
for (CustomerDeliveryDetail customerDeliveryDetail : customerDeliveryDetailList) {
String customerCode = customerDeliveryDetail.getCustomerCode() == null ? "" : customerDeliveryDetail.getCustomerCode().trim();
if (customerCode.isEmpty()) {
@@ -302,9 +291,33 @@ public class ReservationStockInOrderImpl extends ServiceImpl problems = new ArrayList<>();
+ if (!missingMaterials.isEmpty()) {
+ problems.add("物料[" + String.join("、", missingMaterials) + "]不存在,请先维护物料信息");
+ }
+ if (!missingCustomers.isEmpty()) {
+ problems.add("客户[" + String.join("、", missingCustomers) + "]不存在,请先维护客户信息");
+ }
+ throw new Exception(String.join(";", problems) + ",维护完成后重新导入");
+ }
+
+ // ====== 后续处理(编号均已存在):货主归属校验、建单落库 ======
+ for (MaterialBaseInfoPO materialBaseInfoPO : materialCache.values()) {
+ if (materialBaseInfoPO.getShipperId() != null && processedShipperIds.add(materialBaseInfoPO.getShipperId())) {
+ Map shipper = new HashMap<>();
+ shipper.put("shipperId", materialBaseInfoPO.getShipperId());
+ shipper.put("shipperName", materialBaseInfoPO.getShipperName());
+ shipper.put("shipperCode", materialBaseInfoPO.getShipperCode());
+ shipperIds.add(shipper);
}
- customerCache.put(customerCode, customer);
}
// 货品明细不为空时,校验货主信息
@@ -506,8 +519,8 @@ public class ReservationStockInOrderImpl extends ServiceImpl materialCache = new LinkedHashMap<>();
List missingMaterials = new ArrayList<>();
for (StockInProductDetail productDetail : productDetailList) {
@@ -522,9 +535,35 @@ public class ReservationStockInOrderImpl extends ServiceImpl customerCodes = new LinkedHashSet<>();
+ for (StockInProductDetail productDetail : productDetailList) {
+ if (productDetail.getCustomerCode() != null && !productDetail.getCustomerCode().trim().isEmpty()) {
+ customerCodes.add(productDetail.getCustomerCode().trim());
+ }
}
+ Map customerCache = new HashMap<>();
+ List missingCustomers = new ArrayList<>();
+ for (String customerCode : customerCodes) {
+ UserPo customer = stockOutOrderMapper.queryCustomerByCode(customerCode, loginUser.getUserPo().getOrganizationId());
+ if (customer == null || customer.getUserId() == null) {
+ missingCustomers.add(customerCode);
+ } else {
+ customerCache.put(customerCode, customer);
+ }
+ }
+ // ====== 第三步:物料/客户存在性校验全部完成后,统一提示两类编号各自有哪些不存在 ======
+ if (!missingMaterials.isEmpty() || !missingCustomers.isEmpty()) {
+ List problems = new ArrayList<>();
+ if (!missingMaterials.isEmpty()) {
+ problems.add("物料[" + String.join("、", missingMaterials) + "]不存在,请先维护物料信息");
+ }
+ if (!missingCustomers.isEmpty()) {
+ problems.add("客户[" + String.join("、", missingCustomers) + "]不存在,请先维护客户信息");
+ }
+ throw new ServiceException(String.join(";", problems) + ",维护完成后重新导入");
+ }
+ // ====== 后续处理(编号均已存在):名称自动匹配、货主归属与一致性校验、建单 ======
// 明细回填库中匹配到的物料名称(自动匹配,模板中的名称列可不填/以库中为准;库中名称为空时保留模板值)
for (StockInProductDetail productDetail : productDetailList) {
String materialName = materialCache.get(productDetail.getProductCode()).getMaterialName();
@@ -532,7 +571,7 @@ public class ReservationStockInOrderImpl extends ServiceImpl> shipperIds = new ArrayList<>();
Set processedShipperIds = new HashSet<>();
for (MaterialBaseInfoPO materialBaseInfoPO : materialCache.values()) {
@@ -554,24 +593,14 @@ public class ReservationStockInOrderImpl extends ServiceImpl customerCodes = new LinkedHashSet<>();
- for (StockInProductDetail productDetail : productDetailList) {
- if (productDetail.getCustomerCode() != null && !productDetail.getCustomerCode().trim().isEmpty()) {
- customerCodes.add(productDetail.getCustomerCode().trim());
- }
- }
if (customerCodes.size() > 1) {
throw new ServiceException("导入明细中存在多个客户编号(" + String.join("、", customerCodes) + "),一个入库单只能属于一个客户");
}
if (!customerCodes.isEmpty()) {
String customerCode = customerCodes.iterator().next();
- // 查询结果为空说明库中没有该客户,提示维护后再导入
- customer = stockOutOrderMapper.queryCustomerByCode(customerCode, loginUser.getUserPo().getOrganizationId());
- if (customer == null || customer.getUserId() == null) {
- throw new ServiceException("客户[" + customerCode + "]不存在,请先维护客户信息后再导入");
- }
+ customer = customerCache.get(customerCode);
// 客户编号与物料归属货主一致性校验(不一致拦截,提示两者编号;货主编码未维护时提示货主名称)
if (!shipperIds.isEmpty() && !customer.getUserId().equals(shipperIds.get(0).get("shipperId"))) {
Object materialShipperCode = shipperIds.get(0).get("shipperCode");
From 923afda21c57933e862af2e8f14959d4e1eafa04 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com>
Date: Tue, 1 Sep 2026 14:09:23 +0800
Subject: [PATCH 28/87] =?UTF-8?q?=E5=A4=A7=E5=B1=8F=E6=9C=88=E5=8F=B0?=
=?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=9F=A5=E8=AF=A2=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../service/BiPlatformRealDataService.java | 46 +++++++++----------
1 file changed, 22 insertions(+), 24 deletions(-)
diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/service/BiPlatformRealDataService.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/service/BiPlatformRealDataService.java
index 9e2470dc6..fecadf30b 100644
--- a/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/service/BiPlatformRealDataService.java
+++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/service/BiPlatformRealDataService.java
@@ -231,15 +231,18 @@ public class BiPlatformRealDataService {
}
/**
- * 实时组装月台监测数据:真实字段查 YMS 库,写死字段保留静态值。
+ * 实时组装月台监测数据:原则「有真实数据源用真实,无真实数据源用写死模拟」。
+ * 有真实数据源的字段(vehicles / platformOverview / vehicleStatus / taskLoad / taskTotal)
+ * 无条件用 YMS 真实查询覆盖,真实为空即为空,不用模板兜底;
+ * 无真实数据源的字段(效率统计、趋势、告警、任务类型等)保留模板写死值。
* 每次调用实时查库,不经过快照表。
*/
public PlatformSurveillanceVO buildRealTimePlatformSurveillance() {
- // 固定种子,保证写死字段每次生成值一致(真实字段随后实时覆盖)
+ // 固定种子生成写死模板:仅用于没有真实数据源的字段
Random r = new Random(20260825L);
PlatformSurveillanceVO template = BiSnapshotWeeklyRandomDataBuilder.platformSurveillance(r);
- // 作业车辆列表
+ // 作业车辆列表:真实数据源,无条件覆盖(真实为空则返回空列表,不用模板模拟)
List realVehicles = queryVehicles();
List vehicleVos = new ArrayList<>();
for (RealPlatformVehiclePO rv : realVehicles) {
@@ -252,52 +255,47 @@ public class BiPlatformRealDataService {
v.setPlatformDuration(rv.getPlatformDuration() == null ? 0 : rv.getPlatformDuration().intValue());
vehicleVos.add(v);
}
- if (!vehicleVos.isEmpty()) {
- template.setVehicles(vehicleVos);
- }
+ template.setVehicles(vehicleVos);
- // 月台实时概览
- RealPlatformOverviewPO ov = queryPlatformOverview();
+ // 月台实时概览:真实数据源,无条件覆盖
if (template.getPlatformOverview() != null) {
- template.getPlatformOverview().setTotalPlatforms(ov.getTotalPlatforms().intValue());
- template.getPlatformOverview().setOperatingPlatforms(ov.getOperatingPlatforms().intValue());
+ RealPlatformOverviewPO ov = queryPlatformOverview();
int total = ov.getTotalPlatforms().intValue();
int occ = ov.getOperatingPlatforms().intValue();
double rate = total > 0 ? Math.round(((double) occ / total) * 100.0 * 100.0) / 100.0 : 0d;
+ template.getPlatformOverview().setTotalPlatforms(total);
+ template.getPlatformOverview().setOperatingPlatforms(occ);
template.getPlatformOverview().setCurrentOccupancyRate(rate);
- }
- long todayTasks = countTodayTasks();
- if (template.getPlatformOverview() != null) {
- template.getPlatformOverview().setTodayTasks((int) todayTasks);
+ template.getPlatformOverview().setTodayTasks((int) countTodayTasks());
}
- // 作业车辆状态统计
- RealVehicleStatusPO vs = queryVehicleStatusToday();
+ // 作业车辆状态统计:真实数据源,无条件覆盖
if (template.getVehicleStatus() != null) {
+ RealVehicleStatusPO vs = queryVehicleStatusToday();
template.getVehicleStatus().setTodayReservedVehicles(vs.getTodayReservedVehicles().intValue());
template.getVehicleStatus().setNotCheckedIn(vs.getNotCheckedIn().intValue());
template.getVehicleStatus().setOperatingVehicles(vs.getOperatingVehicles().intValue());
template.getVehicleStatus().setCompletedVehicles(vs.getCompletedVehicles().intValue());
}
- // 本月任务统计 taskTotal
- long monthTasks = countMonthTasks();
+ // 本月任务统计:taskTotal 有真实数据源无条件覆盖;YoY 等无真实数据源保留模板写死值
if (template.getMonthlyTaskStatistics() != null) {
- template.getMonthlyTaskStatistics().setTaskTotal((int) monthTasks);
+ template.getMonthlyTaskStatistics().setTaskTotal((int) countMonthTasks());
}
- // 任务负荷(今日 24 小时)
+ // 任务负荷:有真实数据源;真实为空则清空不用模板模拟,有数据则按真实小时覆盖
List loads = queryTaskLoadToday();
- if (!loads.isEmpty() && template.getTaskLoadStatistics() != null) {
+ if (loads.isEmpty()) {
+ template.setTaskLoadStatistics(new ArrayList<>());
+ } else if (template.getTaskLoadStatistics() != null) {
Map hourMap = new HashMap<>();
for (RealTaskLoadPO l : loads) {
hourMap.put(l.getHourOfDay(), l.getTaskCount());
}
for (TaskLoadItemVO item : template.getTaskLoadStatistics()) {
Integer hour = parseHourFromLabel(item.getTime());
- if (hour != null) {
- Long n = hourMap.get(hour);
- if (n != null) item.setTaskCount(n.intValue());
+ if (hour != null && hourMap.containsKey(hour)) {
+ item.setTaskCount(hourMap.get(hour).intValue());
}
}
}
From 2bbd6784c4912a6613e9d904b7c43fa5711e86f0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com>
Date: Tue, 1 Sep 2026 14:14:51 +0800
Subject: [PATCH 29/87] 31
---
mhd-bi/src/main/resources/bootstrap.yml | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/mhd-bi/src/main/resources/bootstrap.yml b/mhd-bi/src/main/resources/bootstrap.yml
index 376c66f95..fa1d95e1a 100644
--- a/mhd-bi/src/main/resources/bootstrap.yml
+++ b/mhd-bi/src/main/resources/bootstrap.yml
@@ -16,17 +16,17 @@ spring:
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
# server-addr: 10.102.192.5:6848
- username: nacos
- password: manhuoda@2023
- #线上正式环境
- server-addr: 10.102.192.30:6848
# username: nacos
# password: manhuoda@2023
+ #线上正式环境
+ server-addr: 10.102.192.31:6848
+ username: nacos
+ password: manhuoda@2023
config:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From c174ea8742ed2a6b262b4601e45c87f1ba2c999f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com>
Date: Tue, 1 Sep 2026 15:15:53 +0800
Subject: [PATCH 30/87] =?UTF-8?q?=E5=8D=95=E5=8F=B7=E7=BC=96=E8=BE=91?=
=?UTF-8?q?=E5=8F=98=E5=8C=96=E9=97=AE=E9=A2=98=EF=BC=8C=E4=BB=A5=E5=8F=8A?=
=?UTF-8?q?=E7=BB=84=E7=BB=87=E6=9F=A5=E8=AF=A2=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../BusinessDocumentOrderApplicationService.java | 8 ++++++--
.../service/BusinessDocumentOrderDomainService.java | 6 +++---
mhd_oms/src/main/resources/bootstrap.yml | 8 ++++----
3 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentOrder/BusinessDocumentOrderApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentOrder/BusinessDocumentOrderApplicationService.java
index 776b4b2b1..ac7afbe76 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentOrder/BusinessDocumentOrderApplicationService.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentOrder/BusinessDocumentOrderApplicationService.java
@@ -103,10 +103,14 @@ public class BusinessDocumentOrderApplicationService {
public List queryList(BusinessDocumentOrderDO businessDocumentOrderDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
- if (loginUser != null){
+ if (loginUser != null && loginUser.getUserPo() != null){
+ // 前端未传组织ID时,查询当前登录组织的数据
+ if (businessDocumentOrderDO.getOrganizationId() == null){
+ businessDocumentOrderDO.setOrganizationId(loginUser.getUserPo().getOrganizationId());
+ }
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
if (topOrganizationId != null && topOrganizationId != 1){
- businessDocumentOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
+ businessDocumentOrderDO.setTopOrganizationId(topOrganizationId);
}
}
return businessDocumentOrderDomainService.queryList(businessDocumentOrderDO);
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentOrder/service/BusinessDocumentOrderDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentOrder/service/BusinessDocumentOrderDomainService.java
index 385e3c3f9..13e523077 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentOrder/service/BusinessDocumentOrderDomainService.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentOrder/service/BusinessDocumentOrderDomainService.java
@@ -737,9 +737,9 @@ public class BusinessDocumentOrderDomainService {
// boolean istrue=businessDocumentOrderService.update(businessDocumentOrderDO);
- //生成货源单号(yyMMdd + 当日顺序号,每日重置) 原更新操作会将 电脑更细为当日的日期。默认和之前的逻辑一样保持不变
- String orderCode = goodsNumberGenerator.generateUniqueGoodsNumber(tmsOrder.getDocumentDate());
- tmsOrder.setGoodsNumber(orderCode);
+ //更新操作保留原业务单号,不做重新生成(单号随单据日期与当日顺序生成,编辑时不应变化)
+ //恢复原单号,避免 BeanUtils.copyProperties 时被前端传入值覆盖
+ tmsOrder.setGoodsNumber(businessDocumentOrderService.getById(businessDocumentOrderDO.getId()).getGoodsNumber());
ReservationStockOutOrder reservationStockOutOrder = reservationStockOutOrderMapper.selectOne(new LambdaQueryWrapper()
.eq(ReservationStockOutOrder::getOutOrderNumber, inOrderNumber)
diff --git a/mhd_oms/src/main/resources/bootstrap.yml b/mhd_oms/src/main/resources/bootstrap.yml
index 542b6bce7..8751e75da 100644
--- a/mhd_oms/src/main/resources/bootstrap.yml
+++ b/mhd_oms/src/main/resources/bootstrap.yml
@@ -18,15 +18,15 @@ spring:
discovery:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
-# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.31:6848
+ server-addr: 10.33.0.129:6010
+# server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
config:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
-# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.31:6848
+ server-addr: 10.33.0.129:6010
+# server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From a4f27ab6432237284ad4754b9668971be5e64645 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Tue, 1 Sep 2026 16:29:41 +0800
Subject: [PATCH 31/87] =?UTF-8?q?feat(oms,wms):=E5=BA=93=E5=AD=98=E6=9F=A5?=
=?UTF-8?q?=E8=AF=A2=E5=AF=BC=E5=87=BA=E6=96=B0=E5=A2=9EisExport=E6=A0=87?=
=?UTF-8?q?=E8=AF=86=E4=B8=8E=E8=9E=8D=E5=90=88=E6=8E=92=E5=BA=8F=20/list?=
=?UTF-8?q?=20=E6=96=B0=E5=A2=9E=E5=8F=AF=E9=80=89=E5=8F=82=E6=95=B0=20isE?=
=?UTF-8?q?xport=20=E6=A0=87=E8=AF=86=E5=AF=BC=E5=87=BA=E8=AF=B7=E6=B1=82(?=
=?UTF-8?q?=E5=AF=BC=E5=87=BA=E6=98=BE=E7=A4=BA=E5=95=86=E5=93=81=E9=A5=AE?=
=?UTF-8?q?=E7=94=A8=E6=9C=89=E6=95=88=E6=9C=9F/=E7=89=A9=E6=96=99?=
=?UTF-8?q?=E5=88=86=E7=B1=BB/=E8=BF=9B=E8=B4=A7=E6=97=A5=E6=9C=9F?=
=?UTF-8?q?=E7=94=B1=E6=9F=A5=E8=AF=A2=E7=BB=93=E6=9E=9C=E7=9B=B4=E6=8E=A5?=
=?UTF-8?q?=E8=BF=94=E5=9B=9E)=EF=BC=9BisExport=3Dtrue=20=E6=97=B6?=
=?UTF-8?q?=E6=89=80=E6=9C=89=E6=9F=A5=E8=AF=A2=E7=BB=B4=E5=BA=A6(OMS=206?=
=?UTF-8?q?=E6=9D=A1/WMS=208=E6=9D=A1)=E7=BB=9F=E4=B8=80=E5=90=AF=E7=94=A8?=
=?UTF-8?q?=E5=AF=BC=E5=87=BA=E8=9E=8D=E5=90=88=E6=8E=92=E5=BA=8F=EF=BC=9A?=
=?UTF-8?q?=E5=88=B0=E6=9C=9F=E6=97=A5=E5=80=92=E5=BA=8F=E7=A9=BA=E5=80=BC?=
=?UTF-8?q?=E6=9C=80=E5=90=8E(=E4=BF=9D=E7=95=99=E5=8E=9F=20orderByExpiryD?=
=?UTF-8?q?ate=20=E7=AC=AC=E4=B8=80=E4=BC=98=E5=85=88=E7=BA=A7,=E8=9E=8D?=
=?UTF-8?q?=E5=90=88=E4=B8=8D=E5=8F=96=E4=BB=A3)=E2=86=92=E5=90=8C?=
=?UTF-8?q?=E5=88=B0=E6=9C=9F=E6=97=A5=E5=86=85=E6=8C=89=E7=89=A9=E6=96=99?=
=?UTF-8?q?=E7=BC=96=E7=A0=81=E5=8D=87=E5=BA=8F=E2=86=920=E5=BA=93?=
=?UTF-8?q?=E5=AD=98=E9=9D=A0=E5=90=8E=E2=86=92=E6=9B=B4=E6=96=B0=E6=97=B6?=
=?UTF-8?q?=E9=97=B4=E5=80=92=E5=BA=8F=E2=86=92MAX(=E5=BA=93=E5=AD=98ID)?=
=?UTF-8?q?=E5=85=9C=E5=BA=95=E4=BF=9D=E8=AF=81=E5=88=86=E9=A1=B5=E7=A8=B3?=
=?UTF-8?q?=E5=AE=9A=EF=BC=9B=E5=90=84=E8=AF=AD=E5=8F=A5=E6=8C=82=E8=BD=BD?=
=?UTF-8?q?=E5=85=AC=E5=85=B1=E7=89=87=E6=AE=B5=20exportOrderByMaterialCod?=
=?UTF-8?q?e=EF=BC=8C=E4=B8=8D=E4=BC=A0=20isExport=20=E4=BF=9D=E6=8C=81?=
=?UTF-8?q?=E5=8E=9F=E6=9C=89=E6=8E=92=E5=BA=8F=EF=BC=9BOMS=20Controller?=
=?UTF-8?q?=20=E5=9C=A8=20isExport=3Dtrue=20=E6=97=B6=E8=B7=B3=E8=BF=87=20?=
=?UTF-8?q?Java=20=E6=8C=89=E6=9B=B4=E6=96=B0=E6=97=B6=E9=97=B4=E9=87=8D?=
=?UTF-8?q?=E6=8E=92=E9=81=BF=E5=85=8D=E8=A6=86=E7=9B=96=20SQL=20=E5=AF=BC?=
=?UTF-8?q?=E5=87=BA=E6=8E=92=E5=BA=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../todo/ReservationMaterialInventoryDO.java | 3 +
.../ReservationMaterialInventoryApi.java | 12 ++-
.../MaterialInventoryMapper.xml | 54 +++++++++--
.../repository/todo/MaterialInventoryDO.java | 3 +
.../MaterialInventoryApi.java | 11 ++-
.../MaterialInventoryMapper.xml | 89 ++++++++++++++++---
6 files changed, 143 insertions(+), 29 deletions(-)
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/todo/ReservationMaterialInventoryDO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/todo/ReservationMaterialInventoryDO.java
index 61fd270a5..13958e2f2 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/todo/ReservationMaterialInventoryDO.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/todo/ReservationMaterialInventoryDO.java
@@ -270,4 +270,7 @@ public class ReservationMaterialInventoryDO extends MaterialBaseDO {
@ApiModelProperty("导出排除库存为0标识:true-排除库存数量汇总为0的数据(所有查询维度 queryRule 均生效);不传-不过滤")
private Boolean excludeZeroInventoryQuantity;
+
+ @ApiModelProperty("导出标识:导出与查询共用 /list,true-本次为导出请求,启用导出融合排序(到期日倒序优先→同到期日按物料编码升序→0库存靠后→更新时间倒序);不传-保持原有排序")
+ private Boolean isExport;
}
\ No newline at end of file
diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationMaterialInventory/ReservationMaterialInventoryApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationMaterialInventory/ReservationMaterialInventoryApi.java
index bae725a5c..0fcb31b52 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationMaterialInventory/ReservationMaterialInventoryApi.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationMaterialInventory/ReservationMaterialInventoryApi.java
@@ -47,7 +47,7 @@ public class ReservationMaterialInventoryApi extends BaseController {
/**
* 分页查询物料库存列表
*/
- @ApiOperation(value = "查询物料库存列表", notes = "导出复用本接口,任意查询维度(queryRule)下:前端\"库存为0是否导出\"选\"是\"时传 excludeZeroInventoryQuantity=true 排除库存为0的数据,不传或 false 导出全部(含库存为0);orderByExpiryDate=true 时按到期日分组排序")
+ @ApiOperation(value = "查询物料库存列表", notes = "导出复用本接口:传 isExport=true 标识导出请求(导出显示:商品饮用有效期expiryDate/物料分类materialClassifyName/进货日期purchaseDate,所有查询维度均返回);excludeZeroInventoryQuantity=true 排除库存为0的数据(所有维度生效);orderByExpiryDate=true 按到期日分组排序")
@GetMapping("/list")
public TableDataInfo list(ReservationMaterialInventoryDTO materialInventoryDTO,
@RequestParam(value = "customerName", required = false) String customerName,
@@ -56,7 +56,9 @@ public class ReservationMaterialInventoryApi extends BaseController {
@RequestParam(value = "purchaseDateStart", required = false) String purchaseDateStart,
@RequestParam(value = "purchaseDateEnd", required = false) String purchaseDateEnd,
@RequestParam(value = "excludeZeroInventoryQuantity", required = false) Boolean excludeZeroInventoryQuantity,
- @RequestParam(value = "orderByExpiryDate", required = false) Boolean orderByExpiryDate)
+ @RequestParam(value = "orderByExpiryDate", required = false) Boolean orderByExpiryDate,
+ // 导出标识:导出与查询共用本接口,isExport=true 表示本次请求为导出(导出专属排序等逻辑以此开关)
+ @RequestParam(value = "isExport", required = false) Boolean isExport)
{
// 出库分配前端传的是客户名称 customerName,这里通过名称查询货主ID,使用精确匹配(不模糊匹配)
String shipperName = null; // 保存查询到的货主名称
@@ -95,12 +97,14 @@ public class ReservationMaterialInventoryApi extends BaseController {
// 导出场景:前端"库存为0是否导出"选"是"时传 excludeZeroInventoryQuantity=true,
// SQL 用 HAVING 排除汇总库存为0的数据(与 WMS 同名参数语义一致)
materialInventoryDO.setExcludeZeroInventoryQuantity(excludeZeroInventoryQuantity);
+ // 导出标识:isExport=true 启用导出融合排序(到期日倒序优先 → 同到期日按物料编码升序,所有维度生效)
+ materialInventoryDO.setIsExport(isExport);
startPage();
// 使用带批次属性的查询方法,批次属性值从库存表中获取
List list = materialInventoryApplicationService.queryListWithBatchAttributes(materialInventoryDO);
// 按更新时间倒序排序;update_time 为空的数据放最后
- // (导出 orderByExpiryDate=true 时跳过该重排,避免覆盖 SQL 的到期日分组排序)
- if (!Boolean.TRUE.equals(orderByExpiryDate)) {
+ // (导出 orderByExpiryDate=true 或 isExport=true 时跳过该重排,避免覆盖 SQL 的导出排序)
+ if (!Boolean.TRUE.equals(orderByExpiryDate) && !Boolean.TRUE.equals(isExport)) {
list.sort((o1, o2) -> {
Date t1 = o1.getUpdateTime();
Date t2 = o2.getUpdateTime();
diff --git a/mhd_oms/src/main/resources/mapper/reservationMaterialInventory/MaterialInventoryMapper.xml b/mhd_oms/src/main/resources/mapper/reservationMaterialInventory/MaterialInventoryMapper.xml
index 200226335..e9cd17b19 100644
--- a/mhd_oms/src/main/resources/mapper/reservationMaterialInventory/MaterialInventoryMapper.xml
+++ b/mhd_oms/src/main/resources/mapper/reservationMaterialInventory/MaterialInventoryMapper.xml
@@ -305,6 +305,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+
+
+ order by CASE WHEN MAX(a.expiry_date) IS NULL THEN 1 ELSE 0 END ASC, MAX(a.expiry_date) DESC,
+ MAX(b.material_code) ASC,
+ CASE WHEN IFNULL(SUM(a.inventory_quantity), 0) = 0 THEN 1 ELSE 0 END ASC,
+ MAX(a.update_time) DESC,
+ MAX(a.material_inventory_id) DESC
+
+
select
@@ -315,7 +326,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- group by a.MATERIAL_INVENTORY_ID order by a.update_time desc
+ group by a.MATERIAL_INVENTORY_ID
+
+
+
+
+ order by a.update_time desc
+
@@ -330,6 +347,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
GROUP BY a.MATERIAL_BASE_INFO_ID,a.WAREHOUSE_ID,a.STORAGE_SECTION_ID,a.STORAGE_LOCATION_ID
+
+
+
@@ -344,6 +364,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
GROUP BY a.WAREHOUSE_ID,a.STORAGE_SECTION_ID,a.STORAGE_LOCATION_ID
+
+
+
@@ -358,6 +381,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
GROUP BY a.MATERIAL_BASE_INFO_ID
+
+
+
@@ -401,16 +427,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
a.organization_id, a.organization_name, a.top_organization_id,
b.material_code, b.material_name
-
+
-
- order by CASE WHEN a.expiry_date IS NULL THEN 1 ELSE 0 END ASC, a.expiry_date DESC,
- sort_order, MAX(a.update_time) DESC
+
+
- order by sort_order, MAX(a.update_time) desc
+
+
+
+ order by CASE WHEN a.expiry_date IS NULL THEN 1 ELSE 0 END ASC, a.expiry_date DESC,
+ sort_order, MAX(a.update_time) DESC
+
+
+ order by sort_order, MAX(a.update_time) desc
+
+
@@ -427,6 +462,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
GROUP BY a.SHIPPER_ID
+
+
+
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/todo/MaterialInventoryDO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/todo/MaterialInventoryDO.java
index c9b3af8aa..312a5f074 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/todo/MaterialInventoryDO.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/todo/MaterialInventoryDO.java
@@ -285,4 +285,7 @@ public class MaterialInventoryDO extends MaterialBaseDO {
@ApiModelProperty("库存分配匹配:Batch Ref NO's token 列表(默认不启用,仅显式赋值时参与匹配)")
private List batchRefNoList;
+
+ @ApiModelProperty("导出标识:导出与查询共用 /list,true-本次为导出请求,启用导出融合排序(到期日倒序优先→同到期日按物料编码升序→0库存靠后→更新时间倒序);不传-保持原有排序")
+ private Boolean isExport;
}
\ No newline at end of file
diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/materialInventory/MaterialInventoryApi.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/materialInventory/MaterialInventoryApi.java
index 93b329ea3..519994447 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/materialInventory/MaterialInventoryApi.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/materialInventory/MaterialInventoryApi.java
@@ -53,7 +53,7 @@ public class MaterialInventoryApi extends BaseController {
/**
* 分页查询物料库存列表
*/
- @ApiOperation(value = "查询物料库存列表", notes = "库存查询页不传 excludeZeroInventoryQuantity 可查出数量为0;出库分配页传 excludeZeroInventoryQuantity=true 排除库存数量为0")
+ @ApiOperation(value = "查询物料库存列表", notes = "库存查询页不传 excludeZeroInventoryQuantity 可查出数量为0;出库分配页传 excludeZeroInventoryQuantity=true 排除库存数量为0;导出复用本接口:传 isExport=true 标识导出请求(导出显示:商品饮用有效期expiryDate/物料分类materialClassifyName/进货日期purchaseDate,所有查询维度均返回)")
@GetMapping("/list")
public TableDataInfo list(MaterialInventoryDTO materialInventoryDTO,
@RequestParam(value = "customerName", required = false) String customerName,
@@ -62,7 +62,9 @@ public class MaterialInventoryApi extends BaseController {
@RequestParam(value = "expiryDateEnd", required = false) String expiryDateEnd,
@RequestParam(value = "purchaseDateStart", required = false) String purchaseDateStart,
@RequestParam(value = "purchaseDateEnd", required = false) String purchaseDateEnd,
- @RequestParam(value = "orderByExpiryDate", required = false) Boolean orderByExpiryDate)
+ @RequestParam(value = "orderByExpiryDate", required = false) Boolean orderByExpiryDate,
+ // 导出标识:导出与查询共用本接口,isExport=true 表示本次请求为导出(导出专属排序等逻辑以此开关)
+ @RequestParam(value = "isExport", required = false) Boolean isExport)
{
if (Boolean.TRUE.equals(excludeZeroInventoryQuantity)) {
materialInventoryDTO.setExcludeZeroInventoryQuantity(true);
@@ -100,6 +102,8 @@ public class MaterialInventoryApi extends BaseController {
materialInventoryDO.setPurchaseDateEnd(purchaseDateEnd);
// 导出场景:queryRule=wlExpiry + orderByExpiryDate=true 时 SQL 按到期日倒序分组(与 OMS 库存查询导出一致)
materialInventoryDO.setOrderByExpiryDate(orderByExpiryDate);
+ // 导出标识:isExport=true 启用导出融合排序(到期日倒序优先 → 同到期日按物料编码升序,所有维度生效)
+ materialInventoryDO.setIsExport(isExport);
Date updateTime = materialInventoryDTO.getUpdateTime();
if (updateTime != null) {
LocalDateTime localDateTime = updateTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
@@ -172,7 +176,8 @@ public class MaterialInventoryApi extends BaseController {
// materialDetailId 是新接口专用参数(出库单明细ID),库存 DTO 的同名字段语义是「上架单明细ID」,
// 泄入原查询会生成错误的 a.material_detail_id 条件导致查空,进原查询前显式清除
materialInventoryDTO.setMaterialDetailId(null);
- return list(materialInventoryDTO, customerName, excludeZeroInventoryQuantity, expiryDateStart, expiryDateEnd, null, null, orderByExpiryDate);
+ // assignableList 非导出场景,isExport 传 null
+ return list(materialInventoryDTO, customerName, excludeZeroInventoryQuantity, expiryDateStart, expiryDateEnd, null, null, orderByExpiryDate, null);
}
@ApiOperation("查询物料库存列表不分页;queryRule=hz 时按货主+物料分组(同一物料在不同货主各占一行)")
diff --git a/mhd_wms/src/main/resources/mapper/materialInventory/MaterialInventoryMapper.xml b/mhd_wms/src/main/resources/mapper/materialInventory/MaterialInventoryMapper.xml
index 3b55cabce..783b033bb 100644
--- a/mhd_wms/src/main/resources/mapper/materialInventory/MaterialInventoryMapper.xml
+++ b/mhd_wms/src/main/resources/mapper/materialInventory/MaterialInventoryMapper.xml
@@ -403,6 +403,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+
+
+ order by CASE WHEN MAX(a.expiry_date) IS NULL THEN 1 ELSE 0 END ASC, MAX(a.expiry_date) DESC,
+ MAX(b.material_code) ASC,
+ CASE WHEN IFNULL(SUM(a.inventory_quantity), 0) = 0 THEN 1 ELSE 0 END ASC,
+ MAX(a.update_time) DESC,
+ MAX(a.material_inventory_id) DESC
+
+
select
@@ -413,7 +424,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- group by a.MATERIAL_INVENTORY_ID order by sort_order, a.update_time desc
+ group by a.MATERIAL_INVENTORY_ID
+
+
+
+
+ order by sort_order, a.update_time desc
+
@@ -586,16 +621,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
GROUP BY a.MATERIAL_BASE_INFO_ID, a.EXPIRY_DATE, a.shipper_id,
a.organization_id, a.top_organization_id
-
+
-
- order by CASE WHEN a.expiry_date IS NULL THEN 1 ELSE 0 END ASC, a.expiry_date DESC,
- sort_order, MAX(a.update_time) DESC
+
+
- order by sort_order, MAX(a.update_time) desc
+
+
+
+ order by CASE WHEN a.expiry_date IS NULL THEN 1 ELSE 0 END ASC, a.expiry_date DESC,
+ sort_order, MAX(a.update_time) DESC
+
+
+ order by sort_order, MAX(a.update_time) desc
+
+
@@ -631,7 +675,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
GROUP BY a.SHIPPER_ID, a.MATERIAL_BASE_INFO_ID,
loc.warehouse_id, loc.warehouse_code, loc.warehouse_name,
loc.storage_section_id, loc.storage_code, loc.storage_name,
- loc.storage_location_id, loc.storage_location_code, loc.storage_location_name order by sort_order, a.update_time desc
+ loc.storage_location_id, loc.storage_location_code, loc.storage_location_name
+
+
+
+
+ order by sort_order, a.update_time desc
+
@@ -691,7 +741,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
b.material_code,
a.warehouse_id,
a.organization_id, a.top_organization_id
- ORDER BY sort_order, MAX(a.update_time) DESC
+
+
+
+
+ ORDER BY sort_order, MAX(a.update_time) DESC
+
@@ -704,7 +759,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- GROUP BY a.SHIPPER_ID, a.WAREHOUSE_ID order by sort_order, a.update_time desc
+ GROUP BY a.SHIPPER_ID, a.WAREHOUSE_ID
+
+
+
+
+ order by sort_order, a.update_time desc
+
From cd41c616bbe0bfba8d2655d65d8d0ffa5f945542 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com>
Date: Tue, 1 Sep 2026 16:30:23 +0800
Subject: [PATCH 32/87] 31
---
mhd_oms/src/main/resources/bootstrap.yml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/mhd_oms/src/main/resources/bootstrap.yml b/mhd_oms/src/main/resources/bootstrap.yml
index 8751e75da..542b6bce7 100644
--- a/mhd_oms/src/main/resources/bootstrap.yml
+++ b/mhd_oms/src/main/resources/bootstrap.yml
@@ -18,15 +18,15 @@ spring:
discovery:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
- server-addr: 10.33.0.129:6010
-# server-addr: 10.102.192.31:6848
+# server-addr: 10.33.0.129:6010
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
config:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
- server-addr: 10.33.0.129:6010
-# server-addr: 10.102.192.31:6848
+# server-addr: 10.33.0.129:6010
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From 77fb71dab476686b40c961f7317b74e24c59b4bd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com>
Date: Tue, 1 Sep 2026 16:32:33 +0800
Subject: [PATCH 33/87] 30
---
mhd_oms/src/main/resources/bootstrap.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/mhd_oms/src/main/resources/bootstrap.yml b/mhd_oms/src/main/resources/bootstrap.yml
index 542b6bce7..ee058f0f6 100644
--- a/mhd_oms/src/main/resources/bootstrap.yml
+++ b/mhd_oms/src/main/resources/bootstrap.yml
@@ -19,14 +19,14 @@ spring:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.31:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
config:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.31:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From 1208e02fe79912e1888a3c3449ffa82dfaed30a5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=B5=B5=E8=BE=89?= <2830717623@qq.com>
Date: Tue, 1 Sep 2026 17:14:23 +0800
Subject: [PATCH 34/87] =?UTF-8?q?yms=E7=A7=9F=E6=88=B7=E5=90=8C=E6=AD=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../com/mhd/common/core/enums/RoleEnum.java | 3 +-
.../service/CommonApplicationService.java | 10 +-
.../service/UserApplicationService.java | 148 +++++++++++++++---
.../factory/UserRoleFactory.java | 10 +-
.../service/UserDomainService.java | 8 +-
.../mhd/user/interfaces/facade/UserAPI.java | 16 ++
6 files changed, 167 insertions(+), 28 deletions(-)
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/enums/RoleEnum.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/enums/RoleEnum.java
index e1f4b27ed..841ba0ded 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/enums/RoleEnum.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/enums/RoleEnum.java
@@ -16,7 +16,8 @@ public enum RoleEnum {
STORE_ADMIN("店铺管理员", "store_admin"),
OWNER_CARGO("货主", "ownerCargo"),
SUPPLIER("供应商", "supplier"),
- CUSTOMER("客户", "customer");
+ CUSTOMER("客户", "customer"),
+ TENANT("租户", "tenant");
private String name;
private String code;
diff --git a/mhd-user-center/src/main/java/com/mhd/user/application/service/CommonApplicationService.java b/mhd-user-center/src/main/java/com/mhd/user/application/service/CommonApplicationService.java
index 04c8c3236..4968160c9 100644
--- a/mhd-user-center/src/main/java/com/mhd/user/application/service/CommonApplicationService.java
+++ b/mhd-user-center/src/main/java/com/mhd/user/application/service/CommonApplicationService.java
@@ -129,8 +129,14 @@ public class CommonApplicationService {
* @param userDO
*/
public void checkAccountInfo(UserDO userDO) {
- //获取当前登录用户的最高组织
- Long topOrganizationId = SecurityUtils.getLoginUser().getUserPo().getTopOrganizationId();
+ //获取当前登录用户的最高组织,远程Feign调用无loginUser时从userDO取
+ Long topOrganizationId;
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (ObjectUtil.isNotNull(loginUser)) {
+ topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
+ } else {
+ topOrganizationId = userDO.getTopOrganizationId();
+ }
checkUserInfo(topOrganizationId, userDO);
}
diff --git a/mhd-user-center/src/main/java/com/mhd/user/application/service/UserApplicationService.java b/mhd-user-center/src/main/java/com/mhd/user/application/service/UserApplicationService.java
index e4372185b..1f44ce5eb 100644
--- a/mhd-user-center/src/main/java/com/mhd/user/application/service/UserApplicationService.java
+++ b/mhd-user-center/src/main/java/com/mhd/user/application/service/UserApplicationService.java
@@ -735,14 +735,20 @@ public class UserApplicationService {
*/
public void addUserInfo(UserDO userDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
- if (ObjectUtil.isNull(loginUser)) {
- throw new DigitalLogisticsException(UserError.USER_NULL);
+ UserPo loginUserPo = null;
+ if (ObjectUtil.isNotNull(loginUser)) {
+ loginUserPo = loginUser.getUserPo();
}
- UserPo loginUserPo = loginUser.getUserPo();
CheckDO checkDO = userFactory.getCheckDo(userDO);
//用户密码传值
if (StringUtils.isNotEmpty(userDO.getUserPassword())) {
- String userPassword = AESUtil.decrypt(userDO.getUserPassword());
+ String userPassword;
+ if (ObjectUtil.isNotNull(loginUser)) {
+ userPassword = AESUtil.decrypt(userDO.getUserPassword());
+ } else {
+ // Feign调用传入的是明文密码,无需AES解密
+ userPassword = userDO.getUserPassword();
+ }
checkDO.setUserPassword(userPassword);
}
//用户信息格式校验
@@ -750,9 +756,15 @@ public class UserApplicationService {
String salt = OConvertUtils.randomGen(8);
userDO.setUserSalt(salt);
regCheck(checkDO);
- //用户密码传值
+ //用户密码加密入库
if (StringUtils.isNotEmpty(userDO.getUserPassword())) {
- String userPassword = AESUtil.decrypt(userDO.getUserPassword());
+ String userPassword;
+ if (ObjectUtil.isNotNull(loginUser)) {
+ userPassword = AESUtil.decrypt(userDO.getUserPassword());
+ } else {
+ // Feign调用传入的是明文密码,无需AES解密
+ userPassword = userDO.getUserPassword();
+ }
//加密算法,PBEWithMD5AndDES,
String passwordEncode = PasswordUtil.encrypt(userDO.getUserAccount(), userPassword, salt);
userDO.setUserPassword(passwordEncode);
@@ -783,11 +795,13 @@ public class UserApplicationService {
String idCardDes = DesensitizedUtil.desensitizedIdNumber(idCard);
userDO.setUserIdcardNumberDes(idCardDes);
}
- userDO.setCreateBy(loginUserPo.getUserId());
- userDO.setCreateByName(loginUserPo.getUserName());
- if (loginUserPo.getUserAccountType() != null && loginUserPo.getUserAccountType() == 5) {
- userDO.setCreateBy(loginUserPo.getCreateBy());
- userDO.setCreateByName(loginUserPo.getCreateByName());
+ if (ObjectUtil.isNotNull(loginUserPo)) {
+ userDO.setCreateBy(loginUserPo.getUserId());
+ userDO.setCreateByName(loginUserPo.getUserName());
+ if (loginUserPo.getUserAccountType() != null && loginUserPo.getUserAccountType() == 5) {
+ userDO.setCreateBy(loginUserPo.getCreateBy());
+ userDO.setCreateByName(loginUserPo.getCreateByName());
+ }
}
userDO.setCreateTime(new Date());
//用户状态:0-无状态,1-正常,2-锁定
@@ -1379,6 +1393,66 @@ public class UserApplicationService {
}
}
+ /**
+ * 远程Feign调用新增用户(无token),仅操作USER表基本字段
+ * 调用方需传入:organizationId、userAccount、userPassword(明文)、userName
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public UserPo addUserByFeign(UserDO userDO) {
+ // 1. 获取一级组织
+ AjaxResult organizationInfo = productServiceFeign.getTopOrganization(userDO.getOrganizationId());
+ String code = organizationInfo.get("code").toString();
+ if (!"200".equals(code)) {
+ throw new DigitalLogisticsException(UserError.USER_ACCOUNT_REG_ERROR);
+ }
+ String data = organizationInfo.get("data").toString();
+ if (ObjectUtil.isNotNull(data)) {
+ userDO.setTopOrganizationId(Long.parseLong(data));
+ }
+ // 2. 获取组织名称
+ AjaxResult orgInfoResult = productServiceFeign.getInfo(userDO.getOrganizationId());
+ if ("200".equals(orgInfoResult.get("code").toString())) {
+ Object orgData = orgInfoResult.get("data");
+ if (ObjectUtil.isNotNull(orgData)) {
+ OrganizationPo organizationPo = BeanUtil.toBean(orgData, OrganizationPo.class);
+ if (ObjectUtil.isNotNull(organizationPo)) {
+ userDO.setOrganizationName(organizationPo.getOrganizationName());
+ }
+ }
+ }
+ // 3. 密码加密(调用方传入明文,无需AES解密)
+ if (StringUtils.isNotEmpty(userDO.getUserPassword())) {
+ String salt = OConvertUtils.randomGen(8);
+ userDO.setUserSalt(salt);
+ String passwordEncode = PasswordUtil.encrypt(userDO.getUserAccount(), userDO.getUserPassword(), salt);
+ userDO.setUserPassword(passwordEncode);
+ }
+ // 4. 根据userId判断新增还是更新
+ if (ObjectUtil.isNotNull(userDO.getUserId())) {
+ // 有userId,更新已有用户
+ UserEntity updateEntity = new UserEntity();
+ BeanUtils.copyProperties(userDO, updateEntity);
+ userMapper.updateById(updateEntity);
+ UserPo userPo = userMapper.selectByUserId(userDO.getUserId());
+ return userPo;
+ } else {
+ // 无userId,新增用户
+ userDO.setCreateTime(new Date());
+ userDO.setUserStatus(1);
+ userDO.setUserAuthStatus(1);
+ userDO.setDelFlag(1);
+ userDO.setRoleCode(RoleEnum.MUST.getCode());
+ userDO.setRoleName(RoleEnum.MUST.getName());
+ if (ObjectUtil.isNull(userDO.getUserAccount()) && ObjectUtil.isNotNull(userDO.getUserPhone())) {
+ userDO.setUserAccount(userDO.getUserPhone());
+ }
+ UserEntity userEntity = userDomainService.addUser(userDO);
+ UserPo userPo = new UserPo();
+ BeanUtils.copyProperties(userEntity, userPo);
+ return userPo;
+ }
+ }
+
/**
* @Description 新增用户
* @Author Alex
@@ -1388,18 +1462,31 @@ public class UserApplicationService {
public UserPo addUserYG(UserDO userDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
String password = userDO.getPlainPassword();
- if (ObjectUtil.isNull(loginUser)) {
- throw new DigitalLogisticsException(UserError.TIMEOUT);
+ // 远程Feign调用时可能无loginUser,优先从loginUser取组织信息,否则使用userDO自身携带的数据
+ if (ObjectUtil.isNotNull(loginUser)) {
+ userDO.setOrganizationName(loginUser.getUserPo().getOrganizationName());
+ } else if (ObjectUtil.isNotNull(userDO.getOrganizationId()) && ObjectUtil.isNull(userDO.getTopOrganizationId())) {
+ // 无loginUser时,提前获取一级组织ID,供后续checkAccountInfo使用
+ AjaxResult topOrgResult = productServiceFeign.getTopOrganization(userDO.getOrganizationId());
+ if ("200".equals(topOrgResult.get("code").toString())) {
+ String topOrgData = topOrgResult.get("data").toString();
+ if (ObjectUtil.isNotNull(topOrgData)) {
+ userDO.setTopOrganizationId(Long.parseLong(topOrgData));
+ }
+ }
}
- userDO.setOrganizationName(loginUser.getUserPo().getOrganizationName());
//2023年3月24日 bug修改 增加登录账号/手机号唯一性校验
commonApplicationService.checkAccountInfo(userDO);
if (ObjectUtil.isNotNull(userDO.getUserId())) {
return updateUser(userDO);
} else {
if (ObjectUtil.isNull(userDO.getOrganizationId())) {
- userDO.setOrganizationId(loginUser.getUserPo().getOrganizationId());
- userDO.setOrganizationName(loginUser.getUserPo().getOrganizationName());
+ if (ObjectUtil.isNotNull(loginUser)) {
+ userDO.setOrganizationId(loginUser.getUserPo().getOrganizationId());
+ userDO.setOrganizationName(loginUser.getUserPo().getOrganizationName());
+ } else {
+ throw new DigitalLogisticsException(UserError.TIMEOUT);
+ }
} else {
// 如果前端传递了 organizationId,根据 organizationId 查询组织信息,获取正确的组织名称
AjaxResult orgInfoResult = productServiceFeign.getInfo(userDO.getOrganizationId());
@@ -1441,7 +1528,14 @@ public class UserApplicationService {
//组装新增用户信息
addUserInfo(userDO);
+ // 远程Feign调用无loginUser时,强制分配默认普通角色,不走管理员
+ if (ObjectUtil.isNull(loginUser)) {
+ userDO.setRoleCode(RoleEnum.TENANT.getCode());
+ userDO.setRoleName(RoleEnum.TENANT.getName());
+ userDO.setUserAccountType(null);
+ }
UserEntity userEntity = userDomainService.addUser(userDO);
+ if (ObjectUtil.isNotNull(loginUser)) {
if (isCustomerManagementPresetRole(userEntity.getRoleCode())) {
// 保持插入结果,不再改 role_code / user_role
} else if ((StringUtils.isEmpty(userEntity.getRoleCode()) || !RoleEnum.PLAT_ADMIN.getCode().equals(userEntity.getRoleCode())) &&
@@ -1480,6 +1574,22 @@ public class UserApplicationService {
userDomainService.updateUser(userDO);
}
}
+ } // end of loginUser != null check
+ else {
+ RoleDo roleDo = new RoleDo();
+ roleDo.setRoleCode(userEntity.getRoleCode());
+ roleDo.setOrganizationId(userEntity.getOrganizationId());
+ RoleEntity roleEntity = roleDomainService.selectByOrganizationIdAndRoleCode(roleDo);
+ if (roleEntity != null) {
+ UserRoleDo userRoleDo = new UserRoleDo();
+ userRoleDo.setUserId(userEntity.getUserId());
+ userRoleDo.setRoleId(roleEntity.getRoleId());
+ userRoleDomainService.addUserRole(userRoleDo);
+ userDO.setRoleId(roleEntity.getRoleId());
+ userDO.setUserId(userEntity.getUserId());
+ userDomainService.updateUser(userDO);
+ }
+ }
BeanUtils.copyProperties(userEntity, userPo);
//同步网货平台员工信息
try {
@@ -1492,13 +1602,15 @@ public class UserApplicationService {
// throw e;
}
//获取组织信息
- Long organizationId = loginUser.getUserPo().getOrganizationId();
+ Long organizationId = ObjectUtil.isNotNull(loginUser) ? loginUser.getUserPo().getOrganizationId() : userDO.getOrganizationId();
Integer isQueue = userMapper.getOrdIsQueue(organizationId);
if (isQueue==1) {
//同步YMS员工信息
try {
- userEntity.setUserPassword(password);
+ if (StringUtils.isNotEmpty(password)) {
+ userEntity.setUserPassword(password);
+ }
ymsDomainService.addOrEditYmsUser(userEntity);
} catch (Exception e) {
// 同步YMS失败时,记录日志但不影响用户保存
diff --git a/mhd-user-center/src/main/java/com/mhd/user/domain/userAggregate/factory/UserRoleFactory.java b/mhd-user-center/src/main/java/com/mhd/user/domain/userAggregate/factory/UserRoleFactory.java
index d4c2c0388..96af6ea6a 100644
--- a/mhd-user-center/src/main/java/com/mhd/user/domain/userAggregate/factory/UserRoleFactory.java
+++ b/mhd-user-center/src/main/java/com/mhd/user/domain/userAggregate/factory/UserRoleFactory.java
@@ -22,12 +22,12 @@ public class UserRoleFactory {
UserRoleEntity userRoleEntity = new UserRoleEntity();
BeanUtils.copyProperties(userRoleDo,userRoleEntity, IgnoreNullUtil.getNullPropertyNames(userRoleDo));
LoginUser loginUser = SecurityUtils.getLoginUser();
- if (ObjectUtil.isNull(loginUser)) {
- throw new DigitalLogisticsException(UserError.TIMEOUT);
+ String userName = null;
+ Long userId = null;
+ if (ObjectUtil.isNotNull(loginUser)) {
+ userName = loginUser.getUsername();
+ userId = loginUser.getUserid();
}
- String userName = loginUser.getUsername();
- // 获取登录人id
- Long userId = loginUser.getUserid();
if(userRoleDo.getUserRoleId() != null){
if(userId != null){
userRoleEntity.setUpdateBy(userId);
diff --git a/mhd-user-center/src/main/java/com/mhd/user/domain/userAggregate/service/UserDomainService.java b/mhd-user-center/src/main/java/com/mhd/user/domain/userAggregate/service/UserDomainService.java
index 5605c1dfb..a421ca8ec 100644
--- a/mhd-user-center/src/main/java/com/mhd/user/domain/userAggregate/service/UserDomainService.java
+++ b/mhd-user-center/src/main/java/com/mhd/user/domain/userAggregate/service/UserDomainService.java
@@ -12,6 +12,7 @@ import com.mhd.user.domain.userAggregate.repository.todo.UserDO;
import com.mhd.common.core.domain.po.app.UserAppPo;
import com.mhd.common.core.annotation.fieldsetvalue.NeedSetValueMethod;
import com.mhd.common.security.utils.SecurityUtils;
+import com.mhd.system.api.model.LoginUser;
import com.mhd.user.infrastructure.util.annotation.DataPermissions;
import com.mhd.user.interfaces.dto.queryDTO.UserDocumentWarningQueryDTO;
import com.mhd.user.interfaces.dto.updateDTO.UpdateHasDefaultAddressDTO;
@@ -50,9 +51,12 @@ public class UserDomainService {
*/
public UserEntity updateUser(UserDO userDO) {
UserEntity userEntity = userFactory.getUserEntity(userDO);
- userEntity.setUpdateBy(SecurityUtils.getLoginUser().getUserid());
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (ObjectUtil.isNotNull(loginUser)) {
+ userEntity.setUpdateBy(loginUser.getUserid());
+ userEntity.setUpdateByName(loginUser.getUsername());
+ }
userEntity.setUpdateTime(new Date());
- userEntity.setUpdateByName(SecurityUtils.getLoginUser().getUsername());
userRepositoryInterface.updateUser(userEntity);
return userEntity;
}
diff --git a/mhd-user-center/src/main/java/com/mhd/user/interfaces/facade/UserAPI.java b/mhd-user-center/src/main/java/com/mhd/user/interfaces/facade/UserAPI.java
index 96d2f14e6..52d5058f9 100644
--- a/mhd-user-center/src/main/java/com/mhd/user/interfaces/facade/UserAPI.java
+++ b/mhd-user-center/src/main/java/com/mhd/user/interfaces/facade/UserAPI.java
@@ -283,6 +283,22 @@ public class UserAPI extends BaseController {
return R.ok(sysUserVo, "操作成功");
}
+ /**
+ * 远程Feign调用新增用户(无token),仅操作USER表基本字段
+ */
+ @ApiOperation("远程Feign修改用户(无token)")
+ @PostMapping("/addUserByFeign")
+ public R addUserByFeign(@RequestBody UserDTO userDTO) {
+ LoginUser sysUserVo = new LoginUser();
+ UserDO userDO = userAssember.toUserDO(userDTO);
+ UserPo userPo = userApplicationService.addUserByFeign(userDO);
+ if (ObjectUtil.isNotNull(userPo)) {
+ sysUserVo.setUserid(userPo.getUserId());
+ }
+ sysUserVo.setUserPo(userPo);
+ return R.ok(sysUserVo, "操作成功");
+ }
+
/**
* @Description 新增合作商
* @Author Alex
From 4deaeaa89da77c31546eac99831a5c1b62976f19 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=B5=B5=E8=BE=89?= <2830717623@qq.com>
Date: Tue, 1 Sep 2026 17:22:26 +0800
Subject: [PATCH 35/87] user30
---
mhd-user-center/src/main/resources/bootstrap.yml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/mhd-user-center/src/main/resources/bootstrap.yml b/mhd-user-center/src/main/resources/bootstrap.yml
index a66be4688..c954a35cf 100644
--- a/mhd-user-center/src/main/resources/bootstrap.yml
+++ b/mhd-user-center/src/main/resources/bootstrap.yml
@@ -18,15 +18,15 @@ spring:
cloud:
nacos:
discovery:
- server-addr: 127.0.0.1:8848
+# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
-# server-addr: 10.102.192.31:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
config:
- server-addr: 127.0.0.1:8848
+# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
-# server-addr: 10.102.192.31:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
group: DEFAULT_GROUP # 默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置
From 1cec76293009b24a11a27aa7ab43ec10a932f390 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=B5=B5=E8=BE=89?= <2830717623@qq.com>
Date: Tue, 1 Sep 2026 17:35:21 +0800
Subject: [PATCH 36/87] user30
---
.../src/main/java/com/mhd/system/api/BmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/OmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WlhyServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/YmsServiceFeign.java | 2 +-
.../com/mhd/common/core/feign/ThirdPartyServiceFeign.java | 2 +-
mhd-user-center/src/main/resources/bootstrap.yml | 4 ++--
.../mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java | 2 +-
mhd_oms/src/main/resources/bootstrap.yml | 4 ++--
9 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
index e18484e8d..8cc8bfd57 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
@@ -18,7 +18,7 @@ import java.util.Set;
/**
* bms财务结算系统feign调用接口
*/
-@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.3:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.32:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface BmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
index e9418197a..4ef3bed80 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.concurrent.CompletableFuture;
-@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.4:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.33:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface OmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
index e4a817238..d976fcc98 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
@@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
-@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.102.192.30:8014",configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.102.192.31:8014",configuration = FeignAutoConfiguration.class)
public interface WlhyServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
index 26a92624c..1fe69a003 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
@@ -21,7 +21,7 @@ import java.util.Map;
* @description: TODO
* @date 2024/5/10 8:58
**/
-@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.3:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.32:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface WmsServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
index 12571141a..750ed853e 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
@@ -9,7 +9,7 @@ import com.mhd.system.api.feign.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
-@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.4:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.33:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface YmsServiceFeign {
/**
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
index 6238639f6..509644885 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
@@ -26,7 +26,7 @@ import java.io.InputStream;
import java.util.List;
import java.util.Map;
-@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.30:8012", configuration = FeignAutoConfiguration.class)
+@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.31:8012", configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd-user-center/src/main/resources/bootstrap.yml b/mhd-user-center/src/main/resources/bootstrap.yml
index c954a35cf..fd3e72060 100644
--- a/mhd-user-center/src/main/resources/bootstrap.yml
+++ b/mhd-user-center/src/main/resources/bootstrap.yml
@@ -20,13 +20,13 @@ spring:
discovery:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
config:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
group: DEFAULT_GROUP # 默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置
diff --git a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
index ca93d3312..8c86ae1ad 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
@@ -22,7 +22,7 @@ import java.util.Map;
/**
* 三方服务 Feign
*/
-@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.30:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.31:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/resources/bootstrap.yml b/mhd_oms/src/main/resources/bootstrap.yml
index ee058f0f6..542b6bce7 100644
--- a/mhd_oms/src/main/resources/bootstrap.yml
+++ b/mhd_oms/src/main/resources/bootstrap.yml
@@ -19,14 +19,14 @@ spring:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
config:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From da3c58a366952bef7a8ad9654d1c41c8a4cdaf79 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Tue, 1 Sep 2026 21:36:33 +0800
Subject: [PATCH 37/87] =?UTF-8?q?fix(wms,oms)=EF=BC=9A=E5=85=A5=E5=BA=93?=
=?UTF-8?q?=E6=8E=92=E5=90=8D=E7=BB=9F=E8=AE=A1=E5=8F=A3=E5=BE=84=E4=BF=AE?=
=?UTF-8?q?=E5=A4=8D=EF=BC=9A=E4=BB=B6=E6=95=B0=E6=94=B9=E4=B8=BA=E5=AE=9E?=
=?UTF-8?q?=E9=99=85=E4=B8=8A=E6=9E=B6=E9=87=8FSUM(SHELVES=5FQUANTITY)(?=
=?UTF-8?q?=E5=8E=9FPIECE=5FCOUNT=E4=B8=BA=E5=BB=BA=E6=A1=A3=E7=94=B3?=
=?UTF-8?q?=E6=8A=A5=E5=80=BC=E4=B8=8D=E9=9A=8F=E6=94=B6=E8=B4=A7=E4=B8=8A?=
=?UTF-8?q?=E6=9E=B6=E5=8F=98=E5=8C=96)=EF=BC=9BOMS=E7=AB=AF=E6=95=B0?=
=?UTF-8?q?=E6=8D=AE=E6=BA=90=E8=B7=A8=E5=BA=93=E6=94=B9=E6=9F=A5WMS?=
=?UTF-8?q?=E5=85=A5=E5=BA=93=E8=A1=A8NGWL=5FTEST=5FWMS.stock=5Fin=5Forder?=
=?UTF-8?q?/in=5Fmaterial=5Fdetail(OMS=E6=89=A7=E8=A1=8C=E5=8D=95=E7=8A=B6?=
=?UTF-8?q?=E6=80=81=E4=B8=8D=E5=9B=9E=E4=BC=A0=E4=B8=94=E4=B8=8A=E6=9E=B6?=
=?UTF-8?q?=E9=87=8F=E5=9B=9E=E5=A1=AB=E4=BB=A3=E7=A0=81=E6=9C=AA=E5=90=AF?=
=?UTF-8?q?=E7=94=A8=EF=BC=8C=E4=B8=8E=E5=87=BA=E5=BA=93=E6=8E=92=E5=90=8D?=
=?UTF-8?q?1300a4e1=E8=B7=A8=E5=BA=93=E4=BF=AE=E6=B3=95=E4=B8=80=E8=87=B4)?=
=?UTF-8?q?=EF=BC=8C=E7=8A=B6=E6=80=81=E6=81=A2=E5=A4=8D=E4=B8=BA=E5=B7=B2?=
=?UTF-8?q?=E5=85=A5=E5=BA=93(5)=EF=BC=9B=E5=85=A5=E4=BB=93=E6=97=A5?=
=?UTF-8?q?=E6=9C=9F=E4=B8=BA=E7=A9=BA=E5=85=9C=E5=BA=95=E5=BB=BA=E6=A1=A3?=
=?UTF-8?q?=E6=97=B6=E9=97=B4=EF=BC=9BOMS=E4=B8=8EWMS=E4=B8=A4=E7=AB=AF?=
=?UTF-8?q?=E6=95=B0=E5=AD=97=E4=B8=80=E8=87=B4=EF=BC=9B=E6=8E=A5=E5=8F=A3?=
=?UTF-8?q?=E8=B7=AF=E5=BE=84/=E5=8F=82=E6=95=B0/=E8=BF=94=E5=9B=9E?=
=?UTF-8?q?=E7=BB=93=E6=9E=84=E4=B8=8D=E5=8F=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../po/ExecutionInboundMaterialRankPO.java | 10 +++---
.../po/ExecutionInboundRankTotalPO.java | 2 +-
.../todo/ExecutionInboundRankDTO.java | 2 +-
.../inboundRank/ExecutionInboundRankApi.java | 8 +++--
.../ExecutionInboundRankMapper.xml | 32 +++++++++++--------
.../repository/po/InboundMaterialRankPO.java | 6 ++--
.../repository/po/InboundRankTotalPO.java | 2 +-
.../facadeApi/inboundRank/InboundRankApi.java | 2 +-
.../mapper/inboundRank/InboundRankMapper.xml | 8 ++---
9 files changed, 40 insertions(+), 32 deletions(-)
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/inboundRank/repository/po/ExecutionInboundMaterialRankPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/inboundRank/repository/po/ExecutionInboundMaterialRankPO.java
index abcf12539..6532af87f 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/inboundRank/repository/po/ExecutionInboundMaterialRankPO.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/inboundRank/repository/po/ExecutionInboundMaterialRankPO.java
@@ -14,8 +14,10 @@ import java.util.Date;
/**
* 入库排名统计PO(一行 = 某仓单内某货品的合计,按件数降序排名)
*
- * 字段口径:入仓日期=执行入仓单入仓日期;仓单编号=执行入库单号;客户编号/存货人=入仓单货主;
- * 件数/毛重/体积=仓单内该货品明细合计;毛重(吨)=明细总毛重KG/1000;
+ *
数据源跨库取 WMS 入库表(NGWL_TEST_WMS.stock_in_order / in_material_detail,OMS 执行单状态/上架量不回传),
+ * 口径与 WMS 端 /inboundRankApi 完全一致,两边数字一致。
+ * 字段口径:入仓日期=WMS入仓单入仓日期(为空兜底建档时间);仓单编号=WMS入库单号;客户编号/存货人=入仓单货主;
+ * 件数/毛重/体积=仓单内该货品明细合计(件数取实际上架量 SHELVES_QUANTITY);毛重(吨)=明细总毛重KG/1000;
* 投保总额=货品档案保额(NGWL_TEST_WMS.material_base_info.insure_amount,组内取MAX防多批次明细行重复累加)
*
* @author rcx
@@ -33,7 +35,7 @@ public class ExecutionInboundMaterialRankPO implements Serializable {
@Excel(name = "入仓日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date warehouseDate;
- @ApiModelProperty("仓单编号(执行入库单号)")
+ @ApiModelProperty("仓单编号(WMS入库单号)")
@Excel(name = "仓单编号")
private String inOrderNumber;
@@ -61,7 +63,7 @@ public class ExecutionInboundMaterialRankPO implements Serializable {
@Excel(name = "单位")
private String unitName;
- @ApiModelProperty("件数(仓单内该货品合计,排名依据)")
+ @ApiModelProperty("件数(仓单内该货品实际上架量合计 SHELVES_QUANTITY,排名依据)")
@Excel(name = "件数")
private BigDecimal pieceCount;
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/inboundRank/repository/po/ExecutionInboundRankTotalPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/inboundRank/repository/po/ExecutionInboundRankTotalPO.java
index d3d1bd88d..c8a51892e 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/inboundRank/repository/po/ExecutionInboundRankTotalPO.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/inboundRank/repository/po/ExecutionInboundRankTotalPO.java
@@ -22,7 +22,7 @@ public class ExecutionInboundRankTotalPO implements Serializable {
private static final long serialVersionUID = 1L;
- @ApiModelProperty("件数合计")
+ @ApiModelProperty("件数合计(实际上架量)")
private BigDecimal totalPieceCount;
@ApiModelProperty("毛重(吨)合计")
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/inboundRank/repository/todo/ExecutionInboundRankDTO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/inboundRank/repository/todo/ExecutionInboundRankDTO.java
index 3e557dd6d..968c289d5 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/inboundRank/repository/todo/ExecutionInboundRankDTO.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/inboundRank/repository/todo/ExecutionInboundRankDTO.java
@@ -8,7 +8,7 @@ import java.io.Serializable;
/**
* 入库排名统计入参DTO
*
- * 数据源为 OMS 执行入库链路(execution_in_material_detail / execution_stock_in_order)
+ * 数据源跨库取 WMS 入库链路(NGWL_TEST_WMS.stock_in_order / in_material_detail,OMS 执行单状态/上架量不回传)
*
* @author rcx
* @date 2026-08-31
diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/inboundRank/ExecutionInboundRankApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/inboundRank/ExecutionInboundRankApi.java
index b7cfd6391..f97d23e57 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/inboundRank/ExecutionInboundRankApi.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/inboundRank/ExecutionInboundRankApi.java
@@ -26,9 +26,11 @@ import java.util.List;
/**
* 入库排名统计Api
*
- * 按入仓日期区间筛选商品入库量统计排名。统计口径:入仓日期(为空的历史单按建档时间兜底);
- * OMS 执行入库单状态不回传(长期停留已创建),不按"已入库"过滤,仅排除已取消(6)/已关闭(7),
- * 与入库明细查询页面口径一致;明细仅取 level=1 主行;一行 = 某仓单内某货品的合计,按件数降序排名。
+ *
按入仓日期区间筛选商品入库量统计排名。OMS 库执行入库单状态/上架数量均不回传,真实数据在 WMS 库,
+ * 故数据源跨库取 WMS 入库表(NGWL_TEST_WMS.stock_in_order/in_material_detail,与 OMS 出库排名跨库修法一致);
+ * 口径与 WMS 端 /inboundRankApi 完全一致,两边数字一致:仅已入库(5) + 明细 level=1 主行 +
+ * 入仓日期(为空的历史单按建档时间兜底) + 件数=实际上架量(SHELVES_QUANTITY);
+ * 一行 = 某仓单内某货品的合计,按件数降序排名。
* 字段:入仓日期/仓单编号/客户编号/存货人/货名/件数/毛重(吨)/投保总额/体积(CBM)。
* 与出库排名(/executionOutboundRankApi)配对,前端用 tab 页区分
*
diff --git a/mhd_oms/src/main/resources/mapper/inboundRank/ExecutionInboundRankMapper.xml b/mhd_oms/src/main/resources/mapper/inboundRank/ExecutionInboundRankMapper.xml
index 0401cc603..e6b76eb0d 100644
--- a/mhd_oms/src/main/resources/mapper/inboundRank/ExecutionInboundRankMapper.xml
+++ b/mhd_oms/src/main/resources/mapper/inboundRank/ExecutionInboundRankMapper.xml
@@ -5,19 +5,23 @@
a.del_flag = 1
and a.level = 1
- and b.del_flag = 1
- and b.status not in (6, 7)
+ and b.status = 5
and b.top_organization_id = #{topOrganizationId}
@@ -48,12 +52,12 @@
- from execution_in_material_detail a
- join execution_stock_in_order b on a.in_order_number = b.in_order_number and b.del_flag = 1
+ from NGWL_TEST_WMS.in_material_detail a
+ join NGWL_TEST_WMS.stock_in_order b on a.in_order_number = b.in_order_number and b.del_flag = 1
left join NGWL_TEST_WMS.material_base_info c on a.material_base_info_id = c.material_base_info_id
-
+
select
@@ -65,7 +69,7 @@
MAX(a.material_name) AS materialName,
MAX(a.SPECIFICATION_MODEL) AS specificationModel,
MAX(a.unit_name) AS unitName,
- IFNULL(SUM(a.PIECE_COUNT), 0) AS pieceCount,
+ IFNULL(SUM(a.SHELVES_QUANTITY), 0) AS pieceCount,
ROUND(IFNULL(SUM(a.TOTAL_GROSS_WEIGHT), 0) / 1000, 3) AS grossWeightTon,
MAX(IFNULL(c.insure_amount, 0)) AS insureAmount,
IFNULL(SUM(a.TOTAL_VOLUME), 0) AS totalVolume
@@ -89,7 +93,7 @@
from (
select
b.in_order_number AS inOrderNumber,
- IFNULL(SUM(a.PIECE_COUNT), 0) AS pieceCount,
+ IFNULL(SUM(a.SHELVES_QUANTITY), 0) AS pieceCount,
IFNULL(SUM(a.TOTAL_GROSS_WEIGHT), 0) AS grossWeightKG,
MAX(IFNULL(c.insure_amount, 0)) AS insureAmount,
IFNULL(SUM(a.TOTAL_VOLUME), 0) AS totalVolume
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/po/InboundMaterialRankPO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/po/InboundMaterialRankPO.java
index 03567787a..3044767a9 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/po/InboundMaterialRankPO.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/po/InboundMaterialRankPO.java
@@ -14,8 +14,8 @@ import java.util.Date;
/**
* 入库排名统计PO(一行 = 某仓单内某货品的合计,按件数降序排名)
*
- * 字段口径:入仓日期=入仓单入仓日期;仓单编号=入库单号;客户编号/存货人=入仓单货主;
- * 件数/毛重/体积=仓单内该货品明细合计;毛重(吨)=明细总毛重KG/1000;
+ *
字段口径:入仓日期=入仓单入仓日期(为空兜底建档时间);仓单编号=入库单号;客户编号/存货人=入仓单货主;
+ * 件数/毛重/体积=仓单内该货品明细合计(件数取实际上架量 SHELVES_QUANTITY);毛重(吨)=明细总毛重KG/1000;
* 投保总额=货品档案保额(material_base_info.insure_amount,组内取MAX防多批次明细行重复累加)
*
* @author rcx
@@ -61,7 +61,7 @@ public class InboundMaterialRankPO implements Serializable {
@Excel(name = "单位")
private String unitName;
- @ApiModelProperty("件数(仓单内该货品合计,排名依据)")
+ @ApiModelProperty("件数(仓单内该货品实际上架量合计 SHELVES_QUANTITY,排名依据)")
@Excel(name = "件数")
private BigDecimal pieceCount;
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/po/InboundRankTotalPO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/po/InboundRankTotalPO.java
index 551bf25d4..f7433e5af 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/po/InboundRankTotalPO.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/po/InboundRankTotalPO.java
@@ -22,7 +22,7 @@ public class InboundRankTotalPO implements Serializable {
private static final long serialVersionUID = 1L;
- @ApiModelProperty("件数合计")
+ @ApiModelProperty("件数合计(实际上架量)")
private BigDecimal totalPieceCount;
@ApiModelProperty("毛重(吨)合计")
diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/inboundRank/InboundRankApi.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/inboundRank/InboundRankApi.java
index 15b0843ce..bde6855dd 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/inboundRank/InboundRankApi.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/inboundRank/InboundRankApi.java
@@ -26,7 +26,7 @@ import java.util.List;
* 入库排名统计Api
*
* 按入仓日期区间筛选商品入库量统计排名。统计口径:入仓日期(为空的历史单按建档时间兜底) + 仅已入库状态(5),
- * 明细仅取 level=1 主行;一行 = 某仓单内某货品的合计,按件数降序排名。
+ * 明细仅取 level=1 主行;一行 = 某仓单内某货品的合计,按件数(实际上架量 SHELVES_QUANTITY)降序排名。
* 字段:入仓日期/仓单编号/客户编号/存货人/货名/件数/毛重(吨)/投保总额/体积(CBM)。
* 与出库排名(/outboundRankApi)配对,前端用 tab 页区分
*
diff --git a/mhd_wms/src/main/resources/mapper/inboundRank/InboundRankMapper.xml b/mhd_wms/src/main/resources/mapper/inboundRank/InboundRankMapper.xml
index 45f454d58..63f9a07e0 100644
--- a/mhd_wms/src/main/resources/mapper/inboundRank/InboundRankMapper.xml
+++ b/mhd_wms/src/main/resources/mapper/inboundRank/InboundRankMapper.xml
@@ -10,7 +10,7 @@
left join 货品档案 material_base_info(c,取保额作投保总额)
口径:b.status = 5已入库(排除已取消(6)/已关闭(7)及未完成单据);
日期筛选按入仓单入仓日期 b.warehouse_date(与列表"入仓日期"列同源,为空的历史单按建档时间兜底);
- 一行 = 某仓单(b.in_order_number)内某货品(a.material_code)的合计,按件数降序排名
+ 一行 = 某仓单(b.in_order_number)内某货品(a.material_code)的合计,按件数(实际上架量 SUM(a.SHELVES_QUANTITY))降序排名
-->
a.del_flag = 1
@@ -54,7 +54,7 @@
left join material_base_info c on a.material_base_info_id = c.material_base_info_id
-
+
select
@@ -66,7 +66,7 @@
MAX(a.material_name) AS materialName,
MAX(a.SPECIFICATION_MODEL) AS specificationModel,
MAX(a.unit_name) AS unitName,
- IFNULL(SUM(a.PIECE_COUNT), 0) AS pieceCount,
+ IFNULL(SUM(a.SHELVES_QUANTITY), 0) AS pieceCount,
ROUND(IFNULL(SUM(a.TOTAL_GROSS_WEIGHT), 0) / 1000, 3) AS grossWeightTon,
MAX(IFNULL(c.insure_amount, 0)) AS insureAmount,
IFNULL(SUM(a.TOTAL_VOLUME), 0) AS totalVolume
@@ -90,7 +90,7 @@
from (
select
b.in_order_number AS inOrderNumber,
- IFNULL(SUM(a.PIECE_COUNT), 0) AS pieceCount,
+ IFNULL(SUM(a.SHELVES_QUANTITY), 0) AS pieceCount,
IFNULL(SUM(a.TOTAL_GROSS_WEIGHT), 0) AS grossWeightKG,
MAX(IFNULL(c.insure_amount, 0)) AS insureAmount,
IFNULL(SUM(a.TOTAL_VOLUME), 0) AS totalVolume
From 004580e252d3c71642a1724e27540d6e8d119514 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Tue, 1 Sep 2026 22:36:10 +0800
Subject: [PATCH 38/87] =?UTF-8?q?=E5=8F=91=2030?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/com/mhd/system/api/BmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/OmsServiceFeign.java | 2 +-
.../main/java/com/mhd/system/api/WlhyServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/YmsServiceFeign.java | 2 +-
.../com/mhd/common/core/feign/ThirdPartyServiceFeign.java | 2 +-
.../oms/infrastructure/feign/ThirdPartyServiceFeign.java | 2 +-
mhd_oms/src/main/resources/bootstrap.yml | 2 +-
mhd_wms/src/main/resources/bootstrap.yml | 8 ++++----
9 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
index 8cc8bfd57..e18484e8d 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
@@ -18,7 +18,7 @@ import java.util.Set;
/**
* bms财务结算系统feign调用接口
*/
-@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.32:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.3:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface BmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
index 4ef3bed80..e9418197a 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.concurrent.CompletableFuture;
-@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.33:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.4:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface OmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
index d976fcc98..de19e469b 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
@@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
-@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.102.192.31:8014",configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "commonWlhyServiceFeign",url = "http://10.102.192.30:8014",value = ServiceNameConstants.WLHY_SERVICE,configuration = FeignAutoConfiguration.class)
public interface WlhyServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
index 1fe69a003..26a92624c 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
@@ -21,7 +21,7 @@ import java.util.Map;
* @description: TODO
* @date 2024/5/10 8:58
**/
-@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.32:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.3:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface WmsServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
index 750ed853e..12571141a 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
@@ -9,7 +9,7 @@ import com.mhd.system.api.feign.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
-@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.33:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.4:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface YmsServiceFeign {
/**
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
index 509644885..6238639f6 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
@@ -26,7 +26,7 @@ import java.io.InputStream;
import java.util.List;
import java.util.Map;
-@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.31:8012", configuration = FeignAutoConfiguration.class)
+@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.30:8012", configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
index 8c86ae1ad..ca93d3312 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
@@ -22,7 +22,7 @@ import java.util.Map;
/**
* 三方服务 Feign
*/
-@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.31:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.30:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/resources/bootstrap.yml b/mhd_oms/src/main/resources/bootstrap.yml
index 542b6bce7..6f6f77377 100644
--- a/mhd_oms/src/main/resources/bootstrap.yml
+++ b/mhd_oms/src/main/resources/bootstrap.yml
@@ -19,7 +19,7 @@ spring:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.31:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
config:
diff --git a/mhd_wms/src/main/resources/bootstrap.yml b/mhd_wms/src/main/resources/bootstrap.yml
index b99fb0b27..966fc1a4a 100644
--- a/mhd_wms/src/main/resources/bootstrap.yml
+++ b/mhd_wms/src/main/resources/bootstrap.yml
@@ -14,18 +14,18 @@ spring:
nacos:
discovery:
# server-addr: 127.0.0.1:8848
- server-addr: 10.33.0.129:6010
+# server-addr: 10.33.0.129:6010
# 线上测试环境配置 容器名+端口号
-# server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
# server-addr: 10.102.192.105:6848
config:
# server-addr: 127.0.0.1:8848
- server-addr: 10.33.0.129:6010
+# server-addr: 10.33.0.129:
# 线上测试环境配置 容器名+端口号
-# server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From 91bdb99ec2d6fd0b0d8f16362ccf52be447022b2 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Tue, 1 Sep 2026 22:50:50 +0800
Subject: [PATCH 39/87] =?UTF-8?q?=E5=8F=91=2031?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/com/mhd/system/api/BmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/OmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WlhyServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/YmsServiceFeign.java | 2 +-
.../com/mhd/common/core/feign/ThirdPartyServiceFeign.java | 2 +-
.../mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java | 2 +-
mhd_oms/src/main/resources/bootstrap.yml | 2 +-
mhd_wms/src/main/resources/bootstrap.yml | 4 ++--
9 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
index e18484e8d..8cc8bfd57 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
@@ -18,7 +18,7 @@ import java.util.Set;
/**
* bms财务结算系统feign调用接口
*/
-@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.3:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.32:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface BmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
index e9418197a..4ef3bed80 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.concurrent.CompletableFuture;
-@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.4:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.33:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface OmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
index de19e469b..d976fcc98 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
@@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
-@FeignClient(contextId = "commonWlhyServiceFeign",url = "http://10.102.192.30:8014",value = ServiceNameConstants.WLHY_SERVICE,configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.102.192.31:8014",configuration = FeignAutoConfiguration.class)
public interface WlhyServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
index 26a92624c..1fe69a003 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
@@ -21,7 +21,7 @@ import java.util.Map;
* @description: TODO
* @date 2024/5/10 8:58
**/
-@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.3:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.32:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface WmsServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
index 12571141a..750ed853e 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
@@ -9,7 +9,7 @@ import com.mhd.system.api.feign.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
-@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.4:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.33:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface YmsServiceFeign {
/**
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
index 6238639f6..509644885 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
@@ -26,7 +26,7 @@ import java.io.InputStream;
import java.util.List;
import java.util.Map;
-@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.30:8012", configuration = FeignAutoConfiguration.class)
+@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.31:8012", configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
index ca93d3312..8c86ae1ad 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
@@ -22,7 +22,7 @@ import java.util.Map;
/**
* 三方服务 Feign
*/
-@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.30:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.31:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/resources/bootstrap.yml b/mhd_oms/src/main/resources/bootstrap.yml
index 6f6f77377..542b6bce7 100644
--- a/mhd_oms/src/main/resources/bootstrap.yml
+++ b/mhd_oms/src/main/resources/bootstrap.yml
@@ -19,7 +19,7 @@ spring:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
config:
diff --git a/mhd_wms/src/main/resources/bootstrap.yml b/mhd_wms/src/main/resources/bootstrap.yml
index 966fc1a4a..1e7da23c1 100644
--- a/mhd_wms/src/main/resources/bootstrap.yml
+++ b/mhd_wms/src/main/resources/bootstrap.yml
@@ -16,7 +16,7 @@ spring:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
# 线上测试环境配置 容器名+端口号
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
@@ -25,7 +25,7 @@ spring:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:
# 线上测试环境配置 容器名+端口号
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From 19e897cae0397543f00c3bd20c04892ce39963f4 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Tue, 1 Sep 2026 23:02:30 +0800
Subject: [PATCH 40/87] =?UTF-8?q?=E5=8F=91=2030?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/com/mhd/system/api/BmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/OmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WlhyServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/YmsServiceFeign.java | 2 +-
.../com/mhd/common/core/feign/ThirdPartyServiceFeign.java | 2 +-
.../mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java | 2 +-
mhd_oms/src/main/resources/bootstrap.yml | 4 ++--
8 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
index 8cc8bfd57..e18484e8d 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
@@ -18,7 +18,7 @@ import java.util.Set;
/**
* bms财务结算系统feign调用接口
*/
-@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.32:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.3:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface BmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
index 4ef3bed80..e9418197a 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.concurrent.CompletableFuture;
-@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.33:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.4:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface OmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
index d976fcc98..de19e469b 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
@@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
-@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.102.192.31:8014",configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "commonWlhyServiceFeign",url = "http://10.102.192.30:8014",value = ServiceNameConstants.WLHY_SERVICE,configuration = FeignAutoConfiguration.class)
public interface WlhyServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
index 1fe69a003..26a92624c 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
@@ -21,7 +21,7 @@ import java.util.Map;
* @description: TODO
* @date 2024/5/10 8:58
**/
-@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.32:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.3:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface WmsServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
index 750ed853e..12571141a 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
@@ -9,7 +9,7 @@ import com.mhd.system.api.feign.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
-@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.33:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.4:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface YmsServiceFeign {
/**
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
index 509644885..6238639f6 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
@@ -26,7 +26,7 @@ import java.io.InputStream;
import java.util.List;
import java.util.Map;
-@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.31:8012", configuration = FeignAutoConfiguration.class)
+@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.30:8012", configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
index 8c86ae1ad..ca93d3312 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
@@ -22,7 +22,7 @@ import java.util.Map;
/**
* 三方服务 Feign
*/
-@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.31:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.30:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/resources/bootstrap.yml b/mhd_oms/src/main/resources/bootstrap.yml
index 542b6bce7..ee058f0f6 100644
--- a/mhd_oms/src/main/resources/bootstrap.yml
+++ b/mhd_oms/src/main/resources/bootstrap.yml
@@ -19,14 +19,14 @@ spring:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.31:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
config:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.31:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From 3989d75f05448fd81e46c6f796f3fe6c9ae01a1a Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Tue, 1 Sep 2026 23:50:34 +0800
Subject: [PATCH 41/87] =?UTF-8?q?=E5=8F=91=2030?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/com/mhd/system/api/BmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/OmsServiceFeign.java | 2 +-
.../main/java/com/mhd/system/api/WlhyServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/YmsServiceFeign.java | 2 +-
.../com/mhd/common/core/feign/ThirdPartyServiceFeign.java | 2 +-
mhd_oms/src/main/resources/bootstrap.yml | 8 ++++----
mhd_wms/src/main/resources/bootstrap.yml | 4 ++--
8 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
index 0d65c89a1..e18484e8d 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
@@ -18,7 +18,7 @@ import java.util.Set;
/**
* bms财务结算系统feign调用接口
*/
-@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.33.0.129:8012",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.3:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface BmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
index 8a7006304..e9418197a 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.concurrent.CompletableFuture;
-@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.33.0.99:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.4:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface OmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
index ba9a45148..de19e469b 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
@@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
-@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.33.0.129:8014",configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "commonWlhyServiceFeign",url = "http://10.102.192.30:8014",value = ServiceNameConstants.WLHY_SERVICE,configuration = FeignAutoConfiguration.class)
public interface WlhyServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
index 7fbd7dd9b..26a92624c 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
@@ -21,7 +21,7 @@ import java.util.Map;
* @description: TODO
* @date 2024/5/10 8:58
**/
-@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.33.0.109:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.3:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface WmsServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
index beba5b1af..12571141a 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
@@ -9,7 +9,7 @@ import com.mhd.system.api.feign.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
-@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.33.0.99:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.4:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface YmsServiceFeign {
/**
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
index 9fd21ae67..6238639f6 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
@@ -26,7 +26,7 @@ import java.io.InputStream;
import java.util.List;
import java.util.Map;
-@FeignClient(value = "mhd-third-party-service",url = "http://10.33.0.129:8012",configuration = FeignAutoConfiguration.class)
+@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.30:8012", configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/resources/bootstrap.yml b/mhd_oms/src/main/resources/bootstrap.yml
index 88471e390..ee058f0f6 100644
--- a/mhd_oms/src/main/resources/bootstrap.yml
+++ b/mhd_oms/src/main/resources/bootstrap.yml
@@ -18,15 +18,15 @@ spring:
discovery:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
- server-addr: 10.33.0.129:6010
-# server-addr: 10.102.192.30:6848
+# server-addr: 10.33.0.129:6010
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
config:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
- server-addr: 10.33.0.129:6010
-# server-addr: 10.102.192.30:6848
+# server-addr: 10.33.0.129:6010
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
diff --git a/mhd_wms/src/main/resources/bootstrap.yml b/mhd_wms/src/main/resources/bootstrap.yml
index 52ade270d..ecb312261 100644
--- a/mhd_wms/src/main/resources/bootstrap.yml
+++ b/mhd_wms/src/main/resources/bootstrap.yml
@@ -16,7 +16,7 @@ spring:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
# 线上测试环境配置 容器名+端口号
- server-addr: 10.102.192.31:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
@@ -25,7 +25,7 @@ spring:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:
# 线上测试环境配置 容器名+端口号
- server-addr: 10.102.192.31:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From f5a7c8c1f356900710a1c9fad68311fe5e3a8df8 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Wed, 2 Sep 2026 00:12:59 +0800
Subject: [PATCH 42/87] =?UTF-8?q?=E5=8F=91=2031?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/com/mhd/system/api/BmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/OmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WlhyServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/YmsServiceFeign.java | 2 +-
.../com/mhd/common/core/feign/ThirdPartyServiceFeign.java | 2 +-
.../mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java | 2 +-
mhd_oms/src/main/resources/bootstrap.yml | 4 ++--
mhd_wms/src/main/resources/bootstrap.yml | 4 ++--
9 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
index e18484e8d..8cc8bfd57 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
@@ -18,7 +18,7 @@ import java.util.Set;
/**
* bms财务结算系统feign调用接口
*/
-@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.3:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.32:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface BmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
index e9418197a..4ef3bed80 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.concurrent.CompletableFuture;
-@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.4:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.33:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface OmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
index de19e469b..d976fcc98 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
@@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
-@FeignClient(contextId = "commonWlhyServiceFeign",url = "http://10.102.192.30:8014",value = ServiceNameConstants.WLHY_SERVICE,configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.102.192.31:8014",configuration = FeignAutoConfiguration.class)
public interface WlhyServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
index 26a92624c..1fe69a003 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
@@ -21,7 +21,7 @@ import java.util.Map;
* @description: TODO
* @date 2024/5/10 8:58
**/
-@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.3:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.32:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface WmsServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
index 12571141a..750ed853e 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
@@ -9,7 +9,7 @@ import com.mhd.system.api.feign.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
-@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.4:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.33:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface YmsServiceFeign {
/**
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
index 6238639f6..509644885 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
@@ -26,7 +26,7 @@ import java.io.InputStream;
import java.util.List;
import java.util.Map;
-@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.30:8012", configuration = FeignAutoConfiguration.class)
+@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.31:8012", configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
index ca93d3312..8c86ae1ad 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
@@ -22,7 +22,7 @@ import java.util.Map;
/**
* 三方服务 Feign
*/
-@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.30:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.31:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/resources/bootstrap.yml b/mhd_oms/src/main/resources/bootstrap.yml
index ee058f0f6..542b6bce7 100644
--- a/mhd_oms/src/main/resources/bootstrap.yml
+++ b/mhd_oms/src/main/resources/bootstrap.yml
@@ -19,14 +19,14 @@ spring:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
config:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
diff --git a/mhd_wms/src/main/resources/bootstrap.yml b/mhd_wms/src/main/resources/bootstrap.yml
index ecb312261..52ade270d 100644
--- a/mhd_wms/src/main/resources/bootstrap.yml
+++ b/mhd_wms/src/main/resources/bootstrap.yml
@@ -16,7 +16,7 @@ spring:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
# 线上测试环境配置 容器名+端口号
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
@@ -25,7 +25,7 @@ spring:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:
# 线上测试环境配置 容器名+端口号
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From 72cb1d8c07b14e8b37c5bb1e7d3e82c1131779c3 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Wed, 2 Sep 2026 14:04:15 +0800
Subject: [PATCH 43/87] =?UTF-8?q?feat(wms):=20=E5=BA=93=E5=AD=98=E5=88=97?=
=?UTF-8?q?=E8=A1=A8=E6=8E=A5=E5=8F=A3=E6=96=B0=E5=A2=9E=E9=9A=90=E8=97=8F?=
=?UTF-8?q?=E5=8F=AF=E7=94=A8=E6=95=B0=E9=87=8F=E4=B8=BA0=E7=9A=84?=
=?UTF-8?q?=E5=8F=82=E6=95=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
/materialInventoryApi/list 新增可选参数 excludeZeroAllocationQuantity,为 true 时排除可用数量=0 的库存行;与已有 excludeZeroInventoryQuantity 组成两个独立开关,不传时保持原有行为。配合盘点-库存选择页隐藏数量为0物料及出库选库存隐藏0库存需求。
---
.../repository/todo/MaterialInventoryDO.java | 2 ++
.../materialInventory/MaterialInventoryDTO.java | 3 +++
.../materialInventory/MaterialInventoryApi.java | 17 ++++++++++++++---
.../MaterialInventoryMapper.xml | 6 ++++++
4 files changed, 25 insertions(+), 3 deletions(-)
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/todo/MaterialInventoryDO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/todo/MaterialInventoryDO.java
index 312a5f074..21c834773 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/todo/MaterialInventoryDO.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/todo/MaterialInventoryDO.java
@@ -256,6 +256,8 @@ public class MaterialInventoryDO extends MaterialBaseDO {
/** 为 true 时 SQL 排除库存数量为 0(含 null 视为 0) */
private Boolean excludeZeroInventoryQuantity;
+ /** 为 true 时 SQL 排除可用数量为 0(含 null 视为 0),出库选库存可用 */
+ private Boolean excludeZeroAllocationQuantity;
private String expiryDateStr;
private String productionDateStr;
private String updateTimeStr;
diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/materialInventory/MaterialInventoryDTO.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/materialInventory/MaterialInventoryDTO.java
index fd5bb71cf..944626b17 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/materialInventory/MaterialInventoryDTO.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/materialInventory/MaterialInventoryDTO.java
@@ -188,6 +188,9 @@ public class MaterialInventoryDTO extends MaterialBaseDTO {
/** 为 true 时排除库存数量为 0 的行(出库分配选库存用);库存查询页不传或 false */
@ApiModelProperty(value = "是否排除库存数量为0", example = "false")
private Boolean excludeZeroInventoryQuantity;
+ /** 为 true 时排除可用数量为 0 的行(库存数量>0 但可用数量=0 表示已被冻结/占用完,无法出库);不传或 false 不过滤 */
+ @ApiModelProperty(value = "是否排除可用数量为0", example = "false")
+ private Boolean excludeZeroAllocationQuantity;
private String expiryDate;
private String productionDate;
/** 进货日期(yyyy-MM-dd,单日精确查询) */
diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/materialInventory/MaterialInventoryApi.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/materialInventory/MaterialInventoryApi.java
index 519994447..ff774c2bb 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/materialInventory/MaterialInventoryApi.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/materialInventory/MaterialInventoryApi.java
@@ -53,11 +53,17 @@ public class MaterialInventoryApi extends BaseController {
/**
* 分页查询物料库存列表
*/
- @ApiOperation(value = "查询物料库存列表", notes = "库存查询页不传 excludeZeroInventoryQuantity 可查出数量为0;出库分配页传 excludeZeroInventoryQuantity=true 排除库存数量为0;导出复用本接口:传 isExport=true 标识导出请求(导出显示:商品饮用有效期expiryDate/物料分类materialClassifyName/进货日期purchaseDate,所有查询维度均返回)")
+ @ApiOperation(value = "查询物料库存列表", notes = "两个隐藏0库存开关(均不传或 false 不过滤,保持原行为):"
+ + "excludeZeroInventoryQuantity=true 排除库存数量为0(盘点-库存选择页\"隐藏数量为0的物料\");"
+ + "excludeZeroAllocationQuantity=true 排除可用数量为0(出库选库存,可用数量=0 表示已被冻结/占用完无法出库);"
+ + "物料编号筛选传 materialCode(精确匹配),仓库筛选传 warehouseId(下拉);"
+ + "库存查询页不传开关可查出数量为0;导出复用本接口:传 isExport=true 标识导出请求"
+ + "(导出显示:商品饮用有效期expiryDate/物料分类materialClassifyName/进货日期purchaseDate,所有查询维度均返回)")
@GetMapping("/list")
public TableDataInfo list(MaterialInventoryDTO materialInventoryDTO,
@RequestParam(value = "customerName", required = false) String customerName,
@RequestParam(value = "excludeZeroInventoryQuantity", required = false) Boolean excludeZeroInventoryQuantity,
+ @RequestParam(value = "excludeZeroAllocationQuantity", required = false) Boolean excludeZeroAllocationQuantity,
@RequestParam(value = "expiryDateStart", required = false) String expiryDateStart,
@RequestParam(value = "expiryDateEnd", required = false) String expiryDateEnd,
@RequestParam(value = "purchaseDateStart", required = false) String purchaseDateStart,
@@ -69,6 +75,9 @@ public class MaterialInventoryApi extends BaseController {
if (Boolean.TRUE.equals(excludeZeroInventoryQuantity)) {
materialInventoryDTO.setExcludeZeroInventoryQuantity(true);
}
+ if (Boolean.TRUE.equals(excludeZeroAllocationQuantity)) {
+ materialInventoryDTO.setExcludeZeroAllocationQuantity(true);
+ }
// 出库分配前端传的是客户名称 customerName,这里通过名称查询货主ID,使用精确匹配(不模糊匹配)
String shipperName = null; // 保存查询到的货主名称
if (StringUtils.isNotBlank(customerName) && materialInventoryDTO.getShipperId() == null) {
@@ -176,8 +185,10 @@ public class MaterialInventoryApi extends BaseController {
// materialDetailId 是新接口专用参数(出库单明细ID),库存 DTO 的同名字段语义是「上架单明细ID」,
// 泄入原查询会生成错误的 a.material_detail_id 条件导致查空,进原查询前显式清除
materialInventoryDTO.setMaterialDetailId(null);
- // assignableList 非导出场景,isExport 传 null
- return list(materialInventoryDTO, customerName, excludeZeroInventoryQuantity, expiryDateStart, expiryDateEnd, null, null, orderByExpiryDate, null);
+ // assignableList 非导出场景,isExport 传 null;excludeZeroAllocationQuantity 已随 DTO 绑定,透传保持开关生效
+ return list(materialInventoryDTO, customerName, excludeZeroInventoryQuantity,
+ materialInventoryDTO.getExcludeZeroAllocationQuantity(),
+ expiryDateStart, expiryDateEnd, null, null, orderByExpiryDate, null);
}
@ApiOperation("查询物料库存列表不分页;queryRule=hz 时按货主+物料分组(同一物料在不同货主各占一行)")
diff --git a/mhd_wms/src/main/resources/mapper/materialInventory/MaterialInventoryMapper.xml b/mhd_wms/src/main/resources/mapper/materialInventory/MaterialInventoryMapper.xml
index 783b033bb..18cdfa24f 100644
--- a/mhd_wms/src/main/resources/mapper/materialInventory/MaterialInventoryMapper.xml
+++ b/mhd_wms/src/main/resources/mapper/materialInventory/MaterialInventoryMapper.xml
@@ -217,6 +217,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and COALESCE(a.inventory_quantity, 0) > 0
+
+ and COALESCE(a.allocation_quantity, 0) > 0
+
and a.create_by_name like concat('%', #{createByName}, '%')
@@ -378,6 +381,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and COALESCE(mi.inventory_quantity, 0) > 0
+
+ and COALESCE(mi.allocation_quantity, 0) > 0
+
and mi.create_by_name like concat('%', #{createByName}, '%')
From 434348f972aa288b363657fe40ddb61c2a37393a Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Wed, 2 Sep 2026 14:32:13 +0800
Subject: [PATCH 44/87] =?UTF-8?q?fix(oms,wms):=20=E5=87=BA=E5=BA=93?=
=?UTF-8?q?=E5=8D=95=E4=B8=8B=E5=8F=91WMS=E5=A4=B1=E8=B4=A5=E8=A2=AB?=
=?UTF-8?q?=E9=9D=99=E9=BB=98=E5=90=9E=E6=8E=89=EF=BC=8C=E4=BF=AE=E5=A4=8D?=
=?UTF-8?q?WMS=E5=87=BA=E5=BA=93=E6=8B=A3=E8=B4=A7=E4=B8=8D=E6=98=BE?=
=?UTF-8?q?=E7=A4=BAOMS=E5=8D=95=E6=8D=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- OMS建单/下发前校验明细数量>0且已关联库存
- OMS检查WMS自动分配/生成拣货单返回值,失败即报错回滚
- WMS自动分配各类失败场景抛带单号的明确异常,替代NPE
- WMS接单幂等保护,失败重试不产生重复数据
---
.../ExecutionStockOutOrderDomainService.java | 71 ++++++++++++++++++-
.../StockOutOrderApplicationService.java | 22 +++++-
.../service/StockOutOrderDomainService.java | 20 ++++++
3 files changed, 107 insertions(+), 6 deletions(-)
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/service/ExecutionStockOutOrderDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/service/ExecutionStockOutOrderDomainService.java
index 19d42bb59..311b600ae 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/service/ExecutionStockOutOrderDomainService.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/service/ExecutionStockOutOrderDomainService.java
@@ -146,6 +146,8 @@ public class ExecutionStockOutOrderDomainService {
*/
@Transactional(rollbackFor = Exception.class)
public Boolean insert(ExecutionStockOutOrderDO stockOutOrderDO) {
+ //建单校验:明细数量必须大于0(0数量单下发WMS后自动分配必失败,出库单会卡死在已审核状态)
+ validateMaterialDetailQuantity(stockOutOrderDO.getMaterialDetailList());
//设置单号
Long warehouseId = stockOutOrderDO.getWarehouseId();
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(warehouseId);
@@ -252,6 +254,8 @@ public class ExecutionStockOutOrderDomainService {
stockOutOrderDO.setBusinessOrderNo(prefix + seq);
}
//设置物料信息
+ //建单校验:明细数量必须大于0(0数量单下发WMS后自动分配必失败,出库单会卡死在已审核状态)
+ validateMaterialDetailQuantity(stockOutOrderDO.getMaterialDetailList());
setMaterialDetailInfo(stockOutOrderDO);
//统计种类
stockOutOrderDO.setMaterialQuantity(stockOutOrderDO.getMaterialDetailList().size());
@@ -493,10 +497,20 @@ public class ExecutionStockOutOrderDomainService {
.set(ExecutionStockOutOrder::getUpdateTime, new Date())
.in(ExecutionStockOutOrder::getOutOrderId, stockOutOrderDO.getOutOrderIds()));
- //todo下发推送到wms
+ //下发前统一校验所有单据:全部通过后再推送WMS,避免部分单据推送成功、部分失败造成两边数据不一致
List inOrderIds = stockOutOrderDO.getOutOrderIds();
+ List issueOrderList = new ArrayList<>();
for (Long inOrderId : inOrderIds) {
ExecutionStockOutOrder byId = stockOutOrderService.getById(inOrderId);
+ if (byId == null) {
+ throw new ServiceException("出库单不存在,outOrderId=" + inOrderId);
+ }
+ validateIssueOrderDetail(byId);
+ issueOrderList.add(byId);
+ }
+
+ //下发推送到wms
+ for (ExecutionStockOutOrder byId : issueOrderList) {
StockOutOrder stockOutOrder = new StockOutOrder();
BeanUtils.copyProperties(byId, stockOutOrder,"outOrderId");
Long warehouseId = stockOutOrder.getWarehouseId();
@@ -535,13 +549,64 @@ public class ExecutionStockOutOrderDomainService {
String outOrderNumber = byId.getOutOrderNumber();
com.mhd.system.api.domain.StockOutOrderDTO stockOutOrderDTO = new com.mhd.system.api.domain.StockOutOrderDTO();
stockOutOrderDTO.setOutOrderNumber(outOrderNumber);
- wmsServiceFeign.execution(stockOutOrderDTO);
+ //WMS自动分配:校验返回值。此前不校验时,WMS侧分配失败被Feign降级吞掉,OMS显示成功但出库单卡死在WMS"已审核"状态,拣货单永远不生成
+ AjaxResult executionResult = wmsServiceFeign.execution(stockOutOrderDTO);
+ if (executionResult == null || !"200".equals(String.valueOf(executionResult.get("code")))) {
+ throw new ServiceException("出库单[" + outOrderNumber + "]WMS自动分配失败:"
+ + (executionResult == null ? "WMS服务不可用或已降级" : executionResult.get("msg")));
+ }
- wmsServiceFeign.genPickingOrderByOms(stockOutOrderDTO);
+ //WMS生成拣货单:同样校验返回值,失败即中断并回滚,让用户能感知到错误
+ AjaxResult genPickingResult = wmsServiceFeign.genPickingOrderByOms(stockOutOrderDTO);
+ if (genPickingResult == null || !"200".equals(String.valueOf(genPickingResult.get("code")))) {
+ throw new ServiceException("出库单[" + outOrderNumber + "]WMS生成拣货单失败:"
+ + (genPickingResult == null ? "WMS服务不可用或已降级" : genPickingResult.get("msg")));
+ }
}
return update;
}
+ /**
+ * 建单校验:出库明细数量必须大于0
+ * 历史缺陷:0数量明细的单下发到WMS后自动分配必然失败,且异常被吞,出库单卡死在"已审核"状态无法生成拣货单
+ */
+ private void validateMaterialDetailQuantity(List materialDetailList) {
+ if (CollectionUtils.isEmpty(materialDetailList)) {
+ throw new ServiceException("出库单明细不能为空");
+ }
+ for (ExecutionOutMaterialDetailDO detail : materialDetailList) {
+ if (detail.getQuantity() == null || detail.getQuantity().compareTo(BigDecimal.ZERO) <= 0) {
+ throw new ServiceException("出库明细数量必须大于0,物料:"
+ + (detail.getMaterialCode() != null ? detail.getMaterialCode() : detail.getMaterialName()));
+ }
+ }
+ }
+
+ /**
+ * 下发前校验出库单明细:
+ * 1.必须有物料明细,且数量大于0;
+ * 2.明细必须已关联库存(materialInventoryId),否则WMS按库存ID自动分配会空指针;
+ * 校验放在推送WMS之前,失败直接报错回滚,避免出库单卡死在WMS"已审核"状态
+ */
+ private void validateIssueOrderDetail(ExecutionStockOutOrder order) {
+ String outOrderNumber = order.getOutOrderNumber();
+ List detailList = outMaterialDetailService.list(new QueryWrapper().lambda()
+ .eq(ExecutionOutMaterialDetail::getOutOrderNumber, outOrderNumber));
+ if (CollectionUtils.isEmpty(detailList)) {
+ throw new ServiceException("出库单[" + outOrderNumber + "]没有物料明细,无法下发");
+ }
+ for (ExecutionOutMaterialDetail detail : detailList) {
+ String materialDesc = detail.getMaterialCode() != null ? detail.getMaterialCode()
+ : (detail.getMaterialName() != null ? detail.getMaterialName() : String.valueOf(detail.getMaterialDetailId()));
+ if (detail.getQuantity() == null || detail.getQuantity().compareTo(BigDecimal.ZERO) <= 0) {
+ throw new ServiceException("出库单[" + outOrderNumber + "]物料[" + materialDesc + "]数量为0,无法下发");
+ }
+ if (detail.getMaterialInventoryId() == null || detail.getMaterialInventoryId() <= 0) {
+ throw new ServiceException("出库单[" + outOrderNumber + "]物料[" + materialDesc + "]未关联库存,无法下发");
+ }
+ }
+ }
+
/**
* @description 修改出库单
* @author ZhouGY
diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java
index 50c3e19cd..7dfe88da6 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java
@@ -1122,8 +1122,20 @@ public class StockOutOrderApplicationService {
// throw new ServiceException("库存不存在:" + batchRefNo + " " + sheetRefNo + " " + boxPalletNo);
// }
Long materialInventoryId = detail.getMaterialInventoryId();
+ String materialDesc = detail.getMaterialCode() != null ? detail.getMaterialCode()
+ : (detail.getMaterialName() != null ? detail.getMaterialName() : String.valueOf(detail.getUniqueId()));
+ //OMS推送的库存ID缺失或在WMS不存在时明确报错(此前直接解引用空指针,异常被Feign降级吞掉后单据卡死)
+ if (materialInventoryId == null || materialInventoryId <= 0) {
+ throw new ServiceException("出库单[" + outOrderNumber + "]物料[" + materialDesc + "]未关联库存,无法自动分配");
+ }
MaterialInventory materialInventory = materialInventoryMapper.selectById(materialInventoryId);
+ if (materialInventory == null) {
+ throw new ServiceException("出库单[" + outOrderNumber + "]物料[" + materialDesc + "]库存不存在,库存ID=" + materialInventoryId + ",无法自动分配");
+ }
BigDecimal remainingQuantity = detail.getQuantity(); // 计划数量
+ if (remainingQuantity == null || remainingQuantity.compareTo(BigDecimal.ZERO) <= 0) {
+ throw new ServiceException("出库单[" + outOrderNumber + "]物料[" + materialDesc + "]计划数量为0,无法自动分配");
+ }
// 当前物料的可用库存
BigDecimal availableStock = materialInventory.getAllocationQuantity();
@@ -1132,9 +1144,9 @@ public class StockOutOrderApplicationService {
continue;
}
if (availableStock.compareTo(remainingQuantity) < 0) {
- throw new RuntimeException(
- String.format("可用库存不足,计划数量:%s,当前可用库存:%s",
- remainingQuantity, availableStock)
+ throw new ServiceException(
+ String.format("出库单[%s]物料[%s]可用库存不足,计划数量:%s,当前可用库存:%s",
+ outOrderNumber, materialDesc, remainingQuantity, availableStock)
);
}
// detail.setMaterialInventoryId(materialInventory.getMaterialInventoryId());
@@ -1148,6 +1160,10 @@ public class StockOutOrderApplicationService {
detail.setAllocationQuantity(remainingQuantity);
materialDetailList2.add(detail);
}
+ //全部明细因可用库存为0被跳过时明确报错(此前空明细落入batchAssignUpdate抛出笼统的"物料明细不能为空",难定位)
+ if (materialDetailList2.isEmpty()) {
+ throw new ServiceException("出库单[" + stockOutOrderDb.getOutOrderNumber() + "]所有物料明细的可用库存为0,无法自动分配");
+ }
stockOutOrderD.setMaterialDetailList(materialDetailList2);
StockOutOrderDO assembleStockOutOrderDO = assembleParamByOutOrder(stockOutOrderD);
Boolean assignResult = stockOutOrderDomainService.autoAssign(assembleStockOutOrderDO);
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/service/StockOutOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/service/StockOutOrderDomainService.java
index cd3ac6527..18af0e37e 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/service/StockOutOrderDomainService.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/service/StockOutOrderDomainService.java
@@ -2542,6 +2542,13 @@ public class StockOutOrderDomainService {
private static final String OMS_AUTO_AUDIT_REMARK = "OMS下发自动审核";
public void omsOrderAdd(StockOutOrder stockOutOrder) {
+ //幂等保护:重复下发时同单号活动单已存在则跳过,避免插入重复出库单(下发失败重试场景此前会产生重复数据)
+ StockOutOrder existOrder = stockOutOrderService.getOne(new QueryWrapper().lambda()
+ .eq(StockOutOrder::getOutOrderNumber, stockOutOrder.getOutOrderNumber())
+ .eq(StockOutOrder::getDelFlag, 1), false);
+ if (existOrder != null) {
+ return;
+ }
// 任务下发用户id
String userId = stockInOrderMapper.queryWarehouseUserId(stockOutOrder.getOrganizationId(), stockOutOrder.getWarehouseId(), stockOutOrder.getTopOrganizationId());
stockOutOrder.setTaskIssueUserId(userId);
@@ -2608,6 +2615,11 @@ public class StockOutOrderDomainService {
if (CollectionUtils.isEmpty(outMaterialDetails)) {
return;
}
+ //幂等保护:重复下发时先逻辑删除同单号已存在的活动明细,避免重复插入导致分配/拣货数据错乱
+ outMaterialDetailService.update(new UpdateWrapper().lambda()
+ .set(OutMaterialDetail::getDelFlag, 2)
+ .eq(OutMaterialDetail::getOutOrderNumber, outMaterialDetails.get(0).getOutOrderNumber())
+ .eq(OutMaterialDetail::getDelFlag, 1));
outMaterialDetailService.saveBatch(outMaterialDetails);
autoAuditOmsOutOrder(outMaterialDetails.get(0).getOutOrderNumber());
}
@@ -2617,6 +2629,14 @@ public class StockOutOrderDomainService {
if (CollectionUtils.isEmpty(deliveryDetailsLinks)) {
return;
}
+ //幂等保护:重复下发时先逻辑删除同单号已存在的配送明细,避免重复插入
+ String firstOrderNumber = deliveryDetailsLinks.get(0).getOrderNumber();
+ if (StringUtils.isNotEmpty(firstOrderNumber)) {
+ deliveryDetailsLinkService.update(new UpdateWrapper().lambda()
+ .set(com.mhd.wms.domain.deliveryDetailsLink.entity.DeliveryDetailsLink::getDelFlag, 2)
+ .eq(com.mhd.wms.domain.deliveryDetailsLink.entity.DeliveryDetailsLink::getOrderNumber, firstOrderNumber)
+ .eq(com.mhd.wms.domain.deliveryDetailsLink.entity.DeliveryDetailsLink::getDelFlag, 1));
+ }
for (DeliveryDetailsLink deliveryDetailsLink : deliveryDetailsLinks) {
com.mhd.wms.domain.deliveryDetailsLink.entity.DeliveryDetailsLink deliveryDetailsLinkEntity = new com.mhd.wms.domain.deliveryDetailsLink.entity.DeliveryDetailsLink();
BeanUtils.copyProperties(deliveryDetailsLink, deliveryDetailsLinkEntity);
From e821619a961f31f93a62ceb6556f975bbe590b8f Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Wed, 2 Sep 2026 15:05:29 +0800
Subject: [PATCH 45/87] =?UTF-8?q?fix(=E5=BA=93=E5=AD=98):=20=E4=BF=AE?=
=?UTF-8?q?=E5=A4=8DOMS/WMS=E5=BA=93=E5=AD=98=E6=9F=A5=E8=AF=A2=E8=BF=87?=
=?UTF-8?q?=E6=9C=9F=E6=97=A5=E6=9C=9F=E4=B8=8D=E5=9B=9E=E6=98=BE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
根因:业务只在OMS填写饮用日期,且下发DTO无过期日期字段,饮用日期→过期日期的转换仅存在于收货单生成瞬间,后续环节全部丢失。
- InMaterialDetail(DTO) 补充 expiryDate 字段,打通OMS→WMS传递
- 预约单/执行单下发前:过期日期为空时用饮用日期补齐(治本)
- WMS收货批次属性回写:恢复饮用日期回写并兜底转换为过期日期(加固)
- WMS上架确认:过期日期为空时从收货明细兜底补齐(加固)
---
.../system/api/domain/InMaterialDetail.java | 5 +++++
.../ExecutionStockInOrderDomainService.java | 5 +++++
.../ReservationStockInOrderDomainService.java | 5 +++++
.../ReceiptMaterialDetailImpl.java | 21 ++++++++++++-------
.../service/StockShelfOrderDomainService.java | 19 +++++++++++++++++
5 files changed, 47 insertions(+), 8 deletions(-)
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/InMaterialDetail.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/InMaterialDetail.java
index ff112e22d..927a883aa 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/InMaterialDetail.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/domain/InMaterialDetail.java
@@ -375,6 +375,11 @@ public class InMaterialDetail extends BaseVOEntity {
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date drinkDate;
+ @ApiModelProperty("过期日期")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private Date expiryDate;
+
@ApiModelProperty("来货验收是否合格;1 合格,0 不合格")
@Excel(name = "来货验收是否合格;1 合格,0 不合格")
private String arrivalAcceptQualified;
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/service/ExecutionStockInOrderDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/service/ExecutionStockInOrderDomainService.java
index 22d304bfe..0a18e0d0f 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/service/ExecutionStockInOrderDomainService.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/service/ExecutionStockInOrderDomainService.java
@@ -626,6 +626,11 @@ public class ExecutionStockInOrderDomainService {
inMaterialDetail.setOrganizationId(orgId);
inMaterialDetail.setOrganizationName(orgName);
inMaterialDetail.setTopOrganizationId(topOrgId);
+ // 过期日期为空且饮用日期有值时,用饮用日期补齐过期日期(食品业务饮用日期即效期),
+ // 确保下发WMS后入库/收货/库存链路的过期日期能正常回显
+ if (inMaterialDetail.getExpiryDate() == null && inMaterialDetail.getDrinkDate() != null) {
+ inMaterialDetail.setExpiryDate(inMaterialDetail.getDrinkDate());
+ }
inMaterialDetailList.add(inMaterialDetail);
}
wmsServiceFeign.omsInOrderAddDetail(inMaterialDetailList);
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/service/ReservationStockInOrderDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/service/ReservationStockInOrderDomainService.java
index 591c799b1..bd8852799 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/service/ReservationStockInOrderDomainService.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/service/ReservationStockInOrderDomainService.java
@@ -580,6 +580,11 @@ public class ReservationStockInOrderDomainService {
InMaterialDetail inMaterialDetail = new InMaterialDetail();
BeanUtils.copyProperties(reservationInMaterialDetail, inMaterialDetail, "materialDetailId");
inMaterialDetail.setOmsInMaterialDetail(String.valueOf(reservationInMaterialDetail.getMaterialDetailId()));
+ // 过期日期为空且饮用日期有值时,用饮用日期补齐过期日期(食品业务饮用日期即效期),
+ // 确保下发WMS后入库/收货/库存链路的过期日期能正常回显
+ if (inMaterialDetail.getExpiryDate() == null && inMaterialDetail.getDrinkDate() != null) {
+ inMaterialDetail.setExpiryDate(inMaterialDetail.getDrinkDate());
+ }
inMaterialDetailList.add(inMaterialDetail);
}
wmsServiceFeign.omsInOrderAddDetail(inMaterialDetailList); // 推明细(会触发WMS自动审核)
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/receiptMaterialDetail/repository/persistence/ReceiptMaterialDetailImpl.java b/mhd_wms/src/main/java/com/mhd/wms/domain/receiptMaterialDetail/repository/persistence/ReceiptMaterialDetailImpl.java
index ba78bc34f..c4a2dee8d 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/domain/receiptMaterialDetail/repository/persistence/ReceiptMaterialDetailImpl.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/receiptMaterialDetail/repository/persistence/ReceiptMaterialDetailImpl.java
@@ -743,14 +743,19 @@ public class ReceiptMaterialDetailImpl extends ServiceImpl()
+ .eq(ReceiptMaterialDetail::getUniqueId, shelfMaterialDetail.getReceiptUniqueId())
+ .last("LIMIT 1"));
+ if (receiptDetail != null) {
+ if (receiptDetail.getExpiryDate() != null) {
+ shelfMaterialDetail.setExpiryDate(receiptDetail.getExpiryDate());
+ } else if (receiptDetail.getDrinkDate() != null) {
+ shelfMaterialDetail.setExpiryDate(receiptDetail.getDrinkDate());
+ }
+ }
+ }
Long shipperId = stockReceiptOrderDO.getShipperId();
MaterialInventory param = getParam(shelfMaterialDetail, fieldNames, shipperId,stockReceiptOrderDO.getInOrderNumber());
List materialInventoryPOS = materialInventoryMapper.selectListByWhere(param);
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 46/87] =?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
-
-
-
-
- select
- IFNULL(SUM(a.outbound_quantity), 0) AS totalSalesQuantity,
- COUNT(DISTINCT a.out_order_number) AS totalTradeCount,
- IFNULL(SUM(IFNULL(a.TOTAL_AMOUNT, 0)), 0) AS totalAmount
-
-
-
-
-
-
-
-
- select
- IFNULL(SUM(a.outbound_quantity), 0) AS totalSalesQuantity,
- COUNT(DISTINCT b.out_order_number) AS totalTradeCount,
- IFNULL(SUM(IFNULL(a.TOTAL_AMOUNT, 0)), 0) AS totalAmount
-
-
-
- and b.line_code is not null and b.line_code != ''
-
+ IFNULL(SUM(t.pieceCount), 0) AS totalPieceCount,
+ ROUND(IFNULL(SUM(t.grossWeightKG), 0) / 1000, 3) AS totalGrossWeightTon,
+ IFNULL(SUM(t.totalVolume), 0) AS totalVolume,
+ COUNT(DISTINCT t.outOrderNumber) AS totalOrderCount
+ from (
+ select
+ b.out_order_number AS outOrderNumber,
+ IFNULL(SUM(a.PIECE_COUNT), 0) AS pieceCount,
+ IFNULL(SUM(a.TOTAL_GROSS_WEIGHT), 0) AS grossWeightKG,
+ IFNULL(SUM(a.TOTAL_VOLUME), 0) AS totalVolume
+
+
+
+
+ GROUP BY b.out_order_number, a.material_code
+ ) t
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
-
-
-
-
- select
- IFNULL(SUM(a.outbound_quantity), 0) AS totalSalesQuantity,
- COUNT(DISTINCT a.out_order_number) AS totalTradeCount,
- IFNULL(SUM(IFNULL(a.TOTAL_AMOUNT, 0)), 0) AS totalAmount
-
-
-
-
- and a.material_code like concat('%', #{materialCode}, '%')
-
-
- and a.material_name like concat('%', #{materialName}, '%')
-
-
-
-
-
-
- select
- IFNULL(SUM(a.outbound_quantity), 0) AS totalSalesQuantity,
- COUNT(DISTINCT b.out_order_number) AS totalTradeCount,
- IFNULL(SUM(IFNULL(a.TOTAL_AMOUNT, 0)), 0) AS totalAmount
-
-
-
- and b.line_code is not null and b.line_code != ''
-
+ IFNULL(SUM(t.pieceCount), 0) AS totalPieceCount,
+ ROUND(IFNULL(SUM(t.grossWeightKG), 0) / 1000, 3) AS totalGrossWeightTon,
+ IFNULL(SUM(t.totalVolume), 0) AS totalVolume,
+ COUNT(DISTINCT t.outOrderNumber) AS totalOrderCount
+ from (
+ select
+ b.out_order_number AS outOrderNumber,
+ IFNULL(SUM(a.PIECE_COUNT), 0) AS pieceCount,
+ IFNULL(SUM(a.TOTAL_GROSS_WEIGHT), 0) AS grossWeightKG,
+ IFNULL(SUM(a.TOTAL_VOLUME), 0) AS totalVolume
+
+
+
+
+ GROUP BY b.out_order_number, a.material_code
+ ) t
From 028af3dd2fb18bfa4306ee01f412ab938ba0a45b Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Wed, 2 Sep 2026 15:41:51 +0800
Subject: [PATCH 47/87] =?UTF-8?q?fix(wms,oms)=EF=BC=9A=E5=87=BA=E5=BA=93?=
=?UTF-8?q?=E6=8E=92=E5=90=8D=E4=BB=B6=E6=95=B0=E6=94=B9=E4=B8=BA=E5=A4=8D?=
=?UTF-8?q?=E6=A0=B8=E7=A1=AE=E8=AE=A4=E7=9A=84=E5=AE=9E=E9=99=85=E5=87=BA?=
=?UTF-8?q?=E5=BA=93=E9=87=8F(CHECK=5FQUANTITY)=EF=BC=8C=E6=8E=92=E5=BA=8F?=
=?UTF-8?q?=E5=90=8C=E6=AD=A5=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 件数取数由明细 PIECE_COUNT(计划/申报件数)改为 SUM(CHECK_QUANTITY) 复核确认的实际出库量,与入库排名的实际上架量 SHELVES_QUANTITY 取数逻辑对称(已验证现有已出库数据 222/222 全覆盖)
- 排序第一键由出库数量(outbound_quantity,下发时的计划复制值)改为件数(实际出库量)降序,出仓日期/单号次之
- 接口路径/传参/返回字段结构均不变,前端无感;其余为注释同步
---
.../repository/po/ExecutionOutboundDetailRankPO.java | 2 +-
.../facade/outboundRank/ExecutionOutboundRankApi.java | 2 +-
.../outboundRank/ExecutionOutboundRankMapper.xml | 11 ++++++-----
.../repository/po/OutboundDetailRankPO.java | 2 +-
.../facadeApi/outboundRank/OutboundRankApi.java | 2 +-
.../mapper/outboundRank/OutboundRankMapper.xml | 11 ++++++-----
6 files changed, 16 insertions(+), 14 deletions(-)
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
index f894c05d8..2c37d7725 100644
--- 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
@@ -61,7 +61,7 @@ public class ExecutionOutboundDetailRankPO implements Serializable {
@Excel(name = "线路")
private String lineName;
- @ApiModelProperty("件数")
+ @ApiModelProperty("件数(复核确认的实际出库量合计,与入库排名的实际上架量对称)")
@Excel(name = "件数")
private BigDecimal pieceCount;
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 87e70bbf7..81ae1b67a 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
@@ -26,7 +26,7 @@ import java.util.List;
/**
* 出库排名统计Api
*
- * 按日期区间筛选出库明细列表(一行 = 仓单×货品,件数/毛重/体积按行汇总,按出库数量(销售量)降序,件数/出仓日期/单号次之)。
+ *
按日期区间筛选出库明细列表(一行 = 仓单×货品,件数/毛重/体积按行汇总,按件数(实际复核出库量)降序,出仓日期/单号次之)。
* OMS 库出库单状态不流转(无"已出库"数据),数据源跨库取 WMS 库出库表(NGWL_TEST_WMS.stock_out_order / out_material_detail),
* 口径与 WMS 端 /outboundRankApi 完全一致,两边数字一致;统计条件:出库单创建时间 + 已出库及之后状态(9,12,13),明细仅取 level=1 主行。
* 商品/线路两个 tab 各自独立接口,内部为同一份明细查询:商品接口忽略线路筛选参数,线路接口忽略商品筛选参数。
diff --git a/mhd_oms/src/main/resources/mapper/outboundRank/ExecutionOutboundRankMapper.xml b/mhd_oms/src/main/resources/mapper/outboundRank/ExecutionOutboundRankMapper.xml
index 9dae37f3f..62df4931f 100644
--- a/mhd_oms/src/main/resources/mapper/outboundRank/ExecutionOutboundRankMapper.xml
+++ b/mhd_oms/src/main/resources/mapper/outboundRank/ExecutionOutboundRankMapper.xml
@@ -12,7 +12,8 @@
故跨库取数(与 OMS 库存查询跨库 join NGWL_TEST_WMS.material_base_info 同一模式),
口径与 WMS 端 /outboundRankApi 完全一致,两边数字一致;
条件:b.status in (9已出库,12已复核,13已交接),排除已取消(10)/已关闭(11);
- 日期按出库单创建时间 b.create_time;一行 = 某仓单内某货品的合计,按出库数量(销售量)降序,件数/出仓日期/单号次之
+ 日期按出库单创建时间 b.create_time;一行 = 某仓单内某货品的合计;
+ 件数 = SUM(a.CHECK_QUANTITY) 复核确认的实际出库量(与入库排名的实际上架量 SHELVES_QUANTITY 对称),按件数降序排名
-->
a.del_flag = 1
@@ -61,7 +62,7 @@
join NGWL_TEST_WMS.stock_out_order b on a.out_order_number = b.out_order_number and b.del_flag = 1
-
+
select
@@ -74,7 +75,7 @@
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,
+ IFNULL(SUM(a.CHECK_QUANTITY), 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
@@ -83,7 +84,7 @@
GROUP BY b.out_order_number, a.material_code
- order by IFNULL(SUM(a.outbound_quantity), 0) desc, pieceCount desc, outboundDate desc, outOrderNumber desc
+ order by pieceCount desc, outboundDate desc, outOrderNumber desc
@@ -97,7 +98,7 @@
from (
select
b.out_order_number AS outOrderNumber,
- IFNULL(SUM(a.PIECE_COUNT), 0) AS pieceCount,
+ IFNULL(SUM(a.CHECK_QUANTITY), 0) AS pieceCount,
IFNULL(SUM(a.TOTAL_GROSS_WEIGHT), 0) AS grossWeightKG,
IFNULL(SUM(a.TOTAL_VOLUME), 0) AS totalVolume
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
index 107dc9b0e..4be88b6a7 100644
--- 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
@@ -61,7 +61,7 @@ public class OutboundDetailRankPO implements Serializable {
@Excel(name = "线路")
private String lineName;
- @ApiModelProperty("件数")
+ @ApiModelProperty("件数(复核确认的实际出库量合计,与入库排名的实际上架量对称)")
@Excel(name = "件数")
private BigDecimal pieceCount;
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 8856a01a5..a7cccda65 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
@@ -25,7 +25,7 @@ import java.util.List;
/**
* 出库排名统计Api
*
- *
按日期区间筛选出库明细列表(一行 = 仓单×货品,件数/毛重/体积按行汇总,按出库数量(销售量)降序,件数/出仓日期/单号次之)。
+ *
按日期区间筛选出库明细列表(一行 = 仓单×货品,件数/毛重/体积按行汇总,按件数(实际复核出库量)降序,出仓日期/单号次之)。
* 统计口径:出库单创建时间 + 已出库及之后状态(9,12,13),明细仅取 level=1 主行。
* 商品/线路两个 tab 各自独立接口,内部为同一份明细查询:商品接口忽略线路筛选参数,线路接口忽略商品筛选参数。
* 字段:种类/仓单编号/入库单号/客户编号/收货人/货名/线路/件数/毛重(吨)/体积(CBM)/退保总额(占位null)/出仓日期
diff --git a/mhd_wms/src/main/resources/mapper/outboundRank/OutboundRankMapper.xml b/mhd_wms/src/main/resources/mapper/outboundRank/OutboundRankMapper.xml
index af1abf512..095d5eba0 100644
--- a/mhd_wms/src/main/resources/mapper/outboundRank/OutboundRankMapper.xml
+++ b/mhd_wms/src/main/resources/mapper/outboundRank/OutboundRankMapper.xml
@@ -9,7 +9,8 @@
数据源:出库明细 out_material_detail(a,仅 level=1 主行防重复) join 出库单 stock_out_order(b)
口径:b.status in (9已出库,12已复核,13已交接),排除已取消(10)/已关闭(11);
日期按出库单创建时间 b.create_time(与出库单列表日期筛选一致);
- 一行 = 某仓单(b.out_order_number)内某货品(a.material_code)的合计,按出库数量(销售量)降序,件数/出仓日期/单号次之
+ 一行 = 某仓单(b.out_order_number)内某货品(a.material_code)的合计;
+ 件数 = SUM(a.CHECK_QUANTITY) 复核确认的实际出库量(与入库排名的实际上架量 SHELVES_QUANTITY 对称),按件数降序排名
-->
a.del_flag = 1
@@ -61,7 +62,7 @@
join stock_out_order b on a.out_order_number = b.out_order_number and b.del_flag = 1
-
+
select
@@ -74,7 +75,7 @@
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,
+ IFNULL(SUM(a.CHECK_QUANTITY), 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
@@ -83,7 +84,7 @@
GROUP BY b.out_order_number, a.material_code
- order by IFNULL(SUM(a.outbound_quantity), 0) desc, pieceCount desc, outboundDate desc, outOrderNumber desc
+ order by pieceCount desc, outboundDate desc, outOrderNumber desc
@@ -97,7 +98,7 @@
from (
select
b.out_order_number AS outOrderNumber,
- IFNULL(SUM(a.PIECE_COUNT), 0) AS pieceCount,
+ IFNULL(SUM(a.CHECK_QUANTITY), 0) AS pieceCount,
IFNULL(SUM(a.TOTAL_GROSS_WEIGHT), 0) AS grossWeightKG,
IFNULL(SUM(a.TOTAL_VOLUME), 0) AS totalVolume
From 3576d734afa631d225bc00f7adac290b6c81b8d5 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Wed, 2 Sep 2026 15:43:07 +0800
Subject: [PATCH 48/87] =?UTF-8?q?fix(oms):=20=E5=87=BA=E5=BA=93=E4=B8=9A?=
=?UTF-8?q?=E5=8A=A1=E5=8D=95=E5=AF=BC=E5=85=A5=E5=8F=91=E7=A5=A8=E7=BC=96?=
=?UTF-8?q?=E5=8F=B7=E4=B8=8D=E8=90=BD=E5=BA=93=EF=BC=8C=E8=A1=A5=E9=BD=90?=
=?UTF-8?q?=E7=B9=81=E7=AE=80=E5=BD=92=E4=B8=80=E5=8C=96=E3=80=8C=E7=99=BC?=
=?UTF-8?q?/=E9=A1=8D=E3=80=8D=E6=98=A0=E5=B0=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
模板列头「發票編號/金額/發票張數」归一化时映射表缺「發→发」「額→额」,發票編號列识别失败(invoiceNoCol=-1),客户配送明细落库时发票编号为空、查看不回显,金额列与发票张数同样受影响。补齐映射并在关键列缺失时输出告警日志;历史已导入单据需重新导入。
---
.../listener/DynamicDeliveryExcelListener.java | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/listener/DynamicDeliveryExcelListener.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/listener/DynamicDeliveryExcelListener.java
index 07ae79d33..60edcf4f1 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/listener/DynamicDeliveryExcelListener.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/listener/DynamicDeliveryExcelListener.java
@@ -365,6 +365,12 @@ public class DynamicDeliveryExcelListener extends AnalysisEventListener
Date: Wed, 2 Sep 2026 16:16:46 +0800
Subject: [PATCH 49/87] =?UTF-8?q?feat(oms):=20=E8=BF=90=E8=BE=93=E4=B8=9A?=
=?UTF-8?q?=E5=8A=A1=E5=8D=95=E5=88=97=E8=A1=A8=E6=96=B0=E5=A2=9E=E9=A2=84?=
=?UTF-8?q?=E8=AE=A1=E8=B5=B7=E8=BF=90=E6=97=B6=E9=97=B4=E8=8C=83=E5=9B=B4?=
=?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6(layDateStart/layDateEnd)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../repository/todo/BusinessDocumentOrderDO.java | 10 ++++++++++
.../BusinessDocumentOrderDTO.java | 10 ++++++++++
.../BusinessDocumentOrderMapper.xml | 6 ++++++
3 files changed, 26 insertions(+)
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentOrder/repository/todo/BusinessDocumentOrderDO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentOrder/repository/todo/BusinessDocumentOrderDO.java
index 064754dc3..1c62f12cd 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentOrder/repository/todo/BusinessDocumentOrderDO.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentOrder/repository/todo/BusinessDocumentOrderDO.java
@@ -749,6 +749,16 @@ public class BusinessDocumentOrderDO extends BaseVOEntity{
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date layDate;
+ @ApiModelProperty(value = "预计起运时间起")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date layDateStart;
+
+ @ApiModelProperty(value = "预计起运时间止")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date layDateEnd;
+
@ApiModelProperty("收款账户信息")
private String accountInformation;
diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/dto/businessDocumentOrder/BusinessDocumentOrderDTO.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/dto/businessDocumentOrder/BusinessDocumentOrderDTO.java
index 11057c7c9..e51886a7f 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/dto/businessDocumentOrder/BusinessDocumentOrderDTO.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/dto/businessDocumentOrder/BusinessDocumentOrderDTO.java
@@ -778,6 +778,16 @@ public class BusinessDocumentOrderDTO extends BaseVOEntity{
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date layDate;
+ @ApiModelProperty(value = "预计起运时间起")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date layDateStart;
+
+ @ApiModelProperty(value = "预计起运时间止")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date layDateEnd;
+
@ApiModelProperty("入库单号")
private String inOrderNumber;
diff --git a/mhd_oms/src/main/resources/mapper/businessDocumentOrder/BusinessDocumentOrderMapper.xml b/mhd_oms/src/main/resources/mapper/businessDocumentOrder/BusinessDocumentOrderMapper.xml
index 1a7f2d51c..7c9037567 100644
--- a/mhd_oms/src/main/resources/mapper/businessDocumentOrder/BusinessDocumentOrderMapper.xml
+++ b/mhd_oms/src/main/resources/mapper/businessDocumentOrder/BusinessDocumentOrderMapper.xml
@@ -700,6 +700,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and bdo.PUSH_TIME #{pushTimeEnd} + 1 - 1/86400
+
+ and bdo.LAY_DATE =]]> #{layDateStart}
+
+
+ and bdo.LAY_DATE #{layDateEnd} + 1 - 1/86400
+
and bdo.IE_TYPE = #{ieType}
From 61572c536afa4526c190ce74b7131e3bcfb84a09 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Wed, 2 Sep 2026 16:48:35 +0800
Subject: [PATCH 50/87] =?UTF-8?q?=E5=8F=91=2030?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/com/mhd/system/api/BmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/OmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WlhyServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/YmsServiceFeign.java | 2 +-
.../com/mhd/common/core/feign/ThirdPartyServiceFeign.java | 2 +-
.../mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java | 2 +-
mhd_oms/src/main/resources/bootstrap.yml | 4 ++--
mhd_wms/src/main/resources/bootstrap.yml | 4 ++--
9 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
index 8cc8bfd57..e18484e8d 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
@@ -18,7 +18,7 @@ import java.util.Set;
/**
* bms财务结算系统feign调用接口
*/
-@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.32:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.3:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface BmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
index 4ef3bed80..e9418197a 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.concurrent.CompletableFuture;
-@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.33:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.4:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface OmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
index d976fcc98..de19e469b 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
@@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
-@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.102.192.31:8014",configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "commonWlhyServiceFeign",url = "http://10.102.192.30:8014",value = ServiceNameConstants.WLHY_SERVICE,configuration = FeignAutoConfiguration.class)
public interface WlhyServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
index 1fe69a003..26a92624c 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
@@ -21,7 +21,7 @@ import java.util.Map;
* @description: TODO
* @date 2024/5/10 8:58
**/
-@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.32:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.3:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface WmsServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
index 750ed853e..12571141a 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
@@ -9,7 +9,7 @@ import com.mhd.system.api.feign.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
-@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.33:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.4:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface YmsServiceFeign {
/**
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
index 509644885..6238639f6 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
@@ -26,7 +26,7 @@ import java.io.InputStream;
import java.util.List;
import java.util.Map;
-@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.31:8012", configuration = FeignAutoConfiguration.class)
+@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.30:8012", configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
index 8c86ae1ad..ca93d3312 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
@@ -22,7 +22,7 @@ import java.util.Map;
/**
* 三方服务 Feign
*/
-@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.31:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.30:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/resources/bootstrap.yml b/mhd_oms/src/main/resources/bootstrap.yml
index 542b6bce7..ee058f0f6 100644
--- a/mhd_oms/src/main/resources/bootstrap.yml
+++ b/mhd_oms/src/main/resources/bootstrap.yml
@@ -19,14 +19,14 @@ spring:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.31:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
config:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.31:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
diff --git a/mhd_wms/src/main/resources/bootstrap.yml b/mhd_wms/src/main/resources/bootstrap.yml
index 52ade270d..ecb312261 100644
--- a/mhd_wms/src/main/resources/bootstrap.yml
+++ b/mhd_wms/src/main/resources/bootstrap.yml
@@ -16,7 +16,7 @@ spring:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
# 线上测试环境配置 容器名+端口号
- server-addr: 10.102.192.31:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
@@ -25,7 +25,7 @@ spring:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:
# 线上测试环境配置 容器名+端口号
- server-addr: 10.102.192.31:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From 6d7e42bcde8a792a2b4b4e82fe0465a8460a156d Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Wed, 2 Sep 2026 16:55:19 +0800
Subject: [PATCH 51/87] =?UTF-8?q?=E5=8F=91=2031?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/com/mhd/system/api/BmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/OmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WlhyServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/YmsServiceFeign.java | 2 +-
.../com/mhd/common/core/feign/ThirdPartyServiceFeign.java | 2 +-
.../mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java | 2 +-
mhd_oms/src/main/resources/bootstrap.yml | 4 ++--
mhd_wms/src/main/resources/bootstrap.yml | 4 ++--
9 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
index e18484e8d..8cc8bfd57 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
@@ -18,7 +18,7 @@ import java.util.Set;
/**
* bms财务结算系统feign调用接口
*/
-@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.3:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.32:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface BmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
index e9418197a..4ef3bed80 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.concurrent.CompletableFuture;
-@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.4:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.33:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface OmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
index de19e469b..d976fcc98 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
@@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
-@FeignClient(contextId = "commonWlhyServiceFeign",url = "http://10.102.192.30:8014",value = ServiceNameConstants.WLHY_SERVICE,configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.102.192.31:8014",configuration = FeignAutoConfiguration.class)
public interface WlhyServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
index 26a92624c..1fe69a003 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
@@ -21,7 +21,7 @@ import java.util.Map;
* @description: TODO
* @date 2024/5/10 8:58
**/
-@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.3:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.32:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface WmsServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
index 12571141a..750ed853e 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
@@ -9,7 +9,7 @@ import com.mhd.system.api.feign.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
-@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.4:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.33:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface YmsServiceFeign {
/**
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
index 6238639f6..509644885 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
@@ -26,7 +26,7 @@ import java.io.InputStream;
import java.util.List;
import java.util.Map;
-@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.30:8012", configuration = FeignAutoConfiguration.class)
+@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.31:8012", configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
index ca93d3312..8c86ae1ad 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
@@ -22,7 +22,7 @@ import java.util.Map;
/**
* 三方服务 Feign
*/
-@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.30:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.31:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/resources/bootstrap.yml b/mhd_oms/src/main/resources/bootstrap.yml
index ee058f0f6..542b6bce7 100644
--- a/mhd_oms/src/main/resources/bootstrap.yml
+++ b/mhd_oms/src/main/resources/bootstrap.yml
@@ -19,14 +19,14 @@ spring:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
config:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
diff --git a/mhd_wms/src/main/resources/bootstrap.yml b/mhd_wms/src/main/resources/bootstrap.yml
index ecb312261..52ade270d 100644
--- a/mhd_wms/src/main/resources/bootstrap.yml
+++ b/mhd_wms/src/main/resources/bootstrap.yml
@@ -16,7 +16,7 @@ spring:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
# 线上测试环境配置 容器名+端口号
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
@@ -25,7 +25,7 @@ spring:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:
# 线上测试环境配置 容器名+端口号
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From c1f483f0a0e81ada25cd0da4618b31b23cedcdc7 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Wed, 2 Sep 2026 18:32:12 +0800
Subject: [PATCH 52/87] =?UTF-8?q?feat(oms):=20=E5=87=BA=E5=BA=93=E5=AF=BC?=
=?UTF-8?q?=E5=85=A5=E6=94=AF=E6=8C=81=E6=8C=87=E5=AE=9A=E4=BB=93=E5=BA=93?=
=?UTF-8?q?=EF=BC=8C=E6=A0=A1=E9=AA=8C=E7=89=A9=E6=96=99=E5=BA=93=E5=AD=98?=
=?UTF-8?q?=E5=BD=92=E5=B1=9E=E5=B9=B6=E6=8C=89=E4=BB=93=E8=BF=87=E6=BB=A4?=
=?UTF-8?q?=E6=89=B9=E6=AC=A1=E5=BA=93=E5=AD=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
背景:物料档案全仓共享,此前导入不区分仓库,批次库存"查到哪条算哪条",单据可能取到其他仓库的库存且主表仓库为空。
1. /parseExcel 新增可选参数 warehouseId(前端随文件提交当前页面仓库;不传保持原有行为)
2. 新增 countInventoryByWarehouse 归属校验:物料在指定仓库无库存记录时统一报错"物料[xx]在当前仓库[名]没有库存记录,无法从该仓库出库"
3. getkcId 批次库存查询增加仓库过滤,明细批次/仓库/入库单号均取当前仓库
4. 导入单主表回填当前仓库 warehouseId/Code/Name(此前导入单仓库为空)
5. 出库导入两个入口(reservationStockInOrderApi/executionStockInOrderApi 的 parseExcel)同步支持
6. 库存不足报错补充物料编码,便于定位
---
.../facade/IExecutionStockInOrderService.java | 3 +-
.../ExecutionStockInOrderImpl.java | 31 +++++++++++++++-
.../po/ReservationMaterialInventoryPO.java | 25 ++++++-------
.../IReservationStockInOrderService.java | 3 +-
.../mapper/ReservationStockInOrderMapper.java | 8 ++++-
.../ReservationStockInOrderImpl.java | 35 ++++++++++++++++---
.../ExecutionStockInOrderApi.java | 6 ++--
.../ReservationStockInOrderApi.java | 6 ++--
.../ReservationStockInOrderMapper.xml | 8 +++++
.../repository/po/MaterialInventoryPO.java | 25 ++++++-------
10 files changed, 113 insertions(+), 37 deletions(-)
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/repository/facade/IExecutionStockInOrderService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/repository/facade/IExecutionStockInOrderService.java
index d5f32c3f8..9ffe616d9 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/repository/facade/IExecutionStockInOrderService.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/repository/facade/IExecutionStockInOrderService.java
@@ -53,10 +53,11 @@ public interface IExecutionStockInOrderService extends IService 0) {
+ String warehouseName = reservationStockInOrderMapper.getWarehouseName(warehouseId);
+ List wrongWarehouseMaterials = new ArrayList<>();
+ for (ProductDetail productDetail : productDetailList) {
+ MaterialBaseInfoPO materialBaseInfoPO = stockInOrderMapper.getByCode(productDetail.getProductCode());
+ if (materialBaseInfoPO == null) {
+ continue;
+ }
+ int count = reservationStockInOrderMapper.countInventoryByWarehouse(materialBaseInfoPO.getMaterialBaseInfoId(), warehouseId);
+ if (count <= 0) {
+ wrongWarehouseMaterials.add(productDetail.getProductCode());
+ }
+ }
+ if (!wrongWarehouseMaterials.isEmpty()) {
+ throw new Exception("物料[" + String.join("、", wrongWarehouseMaterials) + "]在当前仓库["
+ + (warehouseName == null ? warehouseId : warehouseName) + "]没有库存记录,无法从该仓库出库,请确认导入仓库是否正确");
+ }
+ }
+
ExecutionStockOutOrderDO reservationStockOutOrderDO = new ExecutionStockOutOrderDO();
reservationStockOutOrderDO.setOutOrderNumber(OrderSequence.getOrderCode("CK"));
reservationStockOutOrderDO.setShipperId((Long) shipperIds.get(0).get("shipperId"));
@@ -263,6 +286,12 @@ public class ExecutionStockInOrderImpl extends ServiceImpl 0) {
+ reservationStockOutOrderDO.setWarehouseId(warehouseId);
+ reservationStockOutOrderDO.setWarehouseCode(reservationStockInOrderMapper.getWarehouseCode(warehouseId));
+ reservationStockOutOrderDO.setWarehouseName(reservationStockInOrderMapper.getWarehouseName(warehouseId));
+ }
reservationStockOutOrderDO.setOrganizationId(loginUser.getUserPo().getOrganizationId());
reservationStockOutOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
reservationStockOutOrderDO.setOrganizationName(loginUser.getUserPo().getOrganizationName());
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/po/ReservationMaterialInventoryPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/po/ReservationMaterialInventoryPO.java
index 02a633c5f..364e0bb55 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/po/ReservationMaterialInventoryPO.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/po/ReservationMaterialInventoryPO.java
@@ -174,40 +174,41 @@ public class ReservationMaterialInventoryPO extends MaterialBasePO {
@Excel(name = "扩展字段2")
private String extAttr2;
+ // 以下业务日期字段只保留年月日:导出复用 /list 接口,前端取 JSON 值直接进 Excel,去掉时分秒(与 WMS 库存查询一致)
@ApiModelProperty("生产日期")
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- @Excel(name = "生产日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ @Excel(name = "生产日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date productionDate;
@ApiModelProperty("过期日期")
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- @Excel(name = "过期日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ @Excel(name = "过期日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date expiryDate;
@ApiModelProperty("存货日期")
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- @Excel(name = "存货日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ @Excel(name = "存货日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date inventoryDate;
@ApiModelProperty("进货日期")
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- @Excel(name = "进货日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ @Excel(name = "进货日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date purchaseDate;
@ApiModelProperty("ExtAttr3")
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- @Excel(name = "ExtAttr3", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ @Excel(name = "ExtAttr3", width = 30, dateFormat = "yyyy-MM-dd")
private Date extAttr3;
@ApiModelProperty("ExtAttr4")
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- @Excel(name = "ExtAttr4", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ @Excel(name = "ExtAttr4", width = 30, dateFormat = "yyyy-MM-dd")
private Date extAttr4;
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/facade/IReservationStockInOrderService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/facade/IReservationStockInOrderService.java
index 5e62c95f9..d2963405b 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/facade/IReservationStockInOrderService.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/facade/IReservationStockInOrderService.java
@@ -53,10 +53,11 @@ public interface IReservationStockInOrderService extends IService getMaterialBaseInfoList(@Param("id") String id);
- public List getkcId(@Param("id") Long id,@Param("q") BigDecimal q);
+ public List getkcId(@Param("id") Long id,@Param("q") BigDecimal q, @Param("warehouseId") Long warehouseId);
+
+ /**
+ * 出库导入校验:物料在指定仓库是否存在库存记录(存在即视为归属该仓库,不限数量)
+ * @return 库存记录数
+ */
+ public int countInventoryByWarehouse(@Param("id") Long id, @Param("warehouseId") Long warehouseId);
public MaterialWarehouseControlPO getInfoByMaterialBaseInfoIds(@Param("id") Long id);
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java
index 20176fe04..44e1cf151 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java
@@ -220,7 +220,7 @@ public class ReservationStockInOrderImpl extends ServiceImpl 0) {
+ String warehouseName = stockInOrderMapper.getWarehouseName(warehouseId);
+ List wrongWarehouseMaterials = new ArrayList<>();
+ for (MaterialBaseInfoPO materialBaseInfoPO : materialCache.values()) {
+ int count = stockInOrderMapper.countInventoryByWarehouse(materialBaseInfoPO.getMaterialBaseInfoId(), warehouseId);
+ if (count <= 0) {
+ wrongWarehouseMaterials.add(materialBaseInfoPO.getMaterialCode());
+ }
+ }
+ if (!wrongWarehouseMaterials.isEmpty()) {
+ throw new Exception("物料[" + String.join("、", wrongWarehouseMaterials) + "]在当前仓库["
+ + (warehouseName == null ? warehouseId : warehouseName) + "]没有库存记录,无法从该仓库出库,请确认导入仓库是否正确");
+ }
+ }
+
// ====== 后续处理(编号均已存在):货主归属校验、建单落库 ======
for (MaterialBaseInfoPO materialBaseInfoPO : materialCache.values()) {
if (materialBaseInfoPO.getShipperId() != null && processedShipperIds.add(materialBaseInfoPO.getShipperId())) {
@@ -343,6 +360,12 @@ public class ReservationStockInOrderImpl extends ServiceImpl 0) {
+ reservationStockOutOrderDO.setWarehouseId(warehouseId);
+ reservationStockOutOrderDO.setWarehouseCode(stockInOrderMapper.getWarehouseCode(warehouseId));
+ reservationStockOutOrderDO.setWarehouseName(stockInOrderMapper.getWarehouseName(warehouseId));
+ }
reservationStockOutOrderDO.setOrganizationId(loginUser.getUserPo().getOrganizationId());
reservationStockOutOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
reservationStockOutOrderDO.setOrganizationName(loginUser.getUserPo().getOrganizationName());
@@ -382,13 +405,14 @@ public class ReservationStockInOrderImpl extends ServiceImpl reservationMaterialInventoryPOS = stockInOrderMapper.getkcId(materialBaseInfoId, new BigDecimal(productDetail.getPieceCount()).setScale(2, BigDecimal.ROUND_HALF_UP));
+ List reservationMaterialInventoryPOS = stockInOrderMapper.getkcId(materialBaseInfoId, new BigDecimal(productDetail.getPieceCount()).setScale(2, BigDecimal.ROUND_HALF_UP), warehouseId);
if (reservationMaterialInventoryPOS != null&&reservationMaterialInventoryPOS.size() > 0) {
ReservationMaterialInventoryPO reservationMaterialInventoryPO = reservationMaterialInventoryPOS.get(0);
Long materialInventoryId = reservationMaterialInventoryPO.getMaterialInventoryId();
String batchNumber = reservationMaterialInventoryPO.getBatchNumber();
String lotNumber = reservationMaterialInventoryPO.getLotNumber();
- Long warehouseId = reservationMaterialInventoryPO.getWarehouseId();
+ // 库存记录所在仓库(指定导入仓库时,getkcId 已按该仓库过滤,两者一致)
+ Long invWarehouseId = reservationMaterialInventoryPO.getWarehouseId();
String warehouseCode = reservationMaterialInventoryPO.getWarehouseCode();
String warehouseName = reservationMaterialInventoryPO.getWarehouseName();
String inOrderNumber = reservationMaterialInventoryPO.getInOrderNumber();
@@ -398,7 +422,7 @@ public class ReservationStockInOrderImpl extends ServiceImpl 0 ? "在当前仓库" : "") + "批次库存数量少于出库数量!");
}
reservationOutMaterialDetailDO.setMaterialBaseInfoId(materialBaseInfoPO.getMaterialBaseInfoId());
reservationOutMaterialDetailDO.setMaterialCode(materialBaseInfoPO.getMaterialCode());
diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/executionStockInOrder/ExecutionStockInOrderApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/executionStockInOrder/ExecutionStockInOrderApi.java
index 6426b6b74..6406a2472 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/executionStockInOrder/ExecutionStockInOrderApi.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/executionStockInOrder/ExecutionStockInOrderApi.java
@@ -203,13 +203,15 @@ public class ExecutionStockInOrderApi extends BaseController {
* 上传并解析Excel文件
* @param file Excel文件
* @param sheetName 工作表名称(出库导入/参考数据)
+ * @param warehouseId 当前仓库id(非空时校验导入物料是否属于该仓库,并按该仓库过滤批次库存)
* @return 解析后的出库数据
*/
@PostMapping("/parseExcel")
public ResponseEntity> parseExcel(
- @RequestParam("file") MultipartFile file) {
+ @RequestParam("file") MultipartFile file,
+ @RequestParam(value = "warehouseId", required = false) Long warehouseId) {
try {
- DeliveryDataDTO deliveryDataDTO = reservationStockInOrderService.parseExcelFile(file, "");
+ DeliveryDataDTO deliveryDataDTO = reservationStockInOrderService.parseExcelFile(file, "", warehouseId);
Map result = new HashMap<>();
result.put("result", deliveryDataDTO);
result.put("code",200);
diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationStockInOrder/ReservationStockInOrderApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationStockInOrder/ReservationStockInOrderApi.java
index e7894a630..3573345ea 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationStockInOrder/ReservationStockInOrderApi.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/reservationStockInOrder/ReservationStockInOrderApi.java
@@ -211,14 +211,16 @@ public class ReservationStockInOrderApi extends BaseController {
/**
* 上传并解析Excel文件(默认读取"出库导入"工作表)
* @param file Excel文件
+ * @param warehouseId 当前仓库id(非空时校验导入物料是否属于该仓库,并按该仓库过滤批次库存)
* @return 解析后的出库数据
*/
@PostMapping("/parseExcel")
public ResponseEntity> parseExcel(
- @RequestParam("file") MultipartFile file) {
+ @RequestParam("file") MultipartFile file,
+ @RequestParam(value = "warehouseId", required = false) Long warehouseId) {
Map result = new HashMap<>();
try {
- DeliveryDataDTO deliveryDataDTO = reservationStockInOrderService.parseExcelFile(file, "");
+ DeliveryDataDTO deliveryDataDTO = reservationStockInOrderService.parseExcelFile(file, "", warehouseId);
result.put("result", deliveryDataDTO);
result.put("code", 200);
result.put("msg", "解析成功");
diff --git a/mhd_oms/src/main/resources/mapper/reservationStockInOrder/ReservationStockInOrderMapper.xml b/mhd_oms/src/main/resources/mapper/reservationStockInOrder/ReservationStockInOrderMapper.xml
index 19c04380f..f2d601503 100644
--- a/mhd_oms/src/main/resources/mapper/reservationStockInOrder/ReservationStockInOrderMapper.xml
+++ b/mhd_oms/src/main/resources/mapper/reservationStockInOrder/ReservationStockInOrderMapper.xml
@@ -556,6 +556,14 @@
select * from "NGWL_TEST_WMS".MATERIAL_INVENTORY where 1 = 1 and DEL_FLAG = 1 and MATERIAL_BASE_INFO_ID = #{id} and ALLOCATION_QUANTITY >= #{q}
+
+ and WAREHOUSE_ID = #{warehouseId}
+
+
+
+
+ select count(1) from "NGWL_TEST_WMS".MATERIAL_INVENTORY
+ where 1 = 1 and DEL_FLAG = 1 and MATERIAL_BASE_INFO_ID = #{id} and WAREHOUSE_ID = #{warehouseId}
select CUSTOMER_NC_CODE from "NGWL_TEST_USER".USER_SHIPPER where 1 = 1 and DEL_FLAG = 1 and USER_ID = #{id} limit 1
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/po/MaterialInventoryPO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/po/MaterialInventoryPO.java
index 1fb5862fc..f785b7190 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/po/MaterialInventoryPO.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/po/MaterialInventoryPO.java
@@ -176,40 +176,41 @@ public class MaterialInventoryPO extends MaterialBasePO {
@Excel(name = "扩展字段2")
private String extAttr2;
+ // 以下业务日期字段只保留年月日:导出复用 /list 接口,前端取 JSON 值直接进 Excel,去掉时分秒(与 OMS 库存查询一致)
@ApiModelProperty("生产日期")
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- @Excel(name = "生产日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ @Excel(name = "生产日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date productionDate;
@ApiModelProperty("过期日期")
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- @Excel(name = "过期日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ @Excel(name = "过期日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date expiryDate;
@ApiModelProperty("存货日期")
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- @Excel(name = "存货日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ @Excel(name = "存货日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date inventoryDate;
@ApiModelProperty("进货日期")
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- @Excel(name = "进货日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ @Excel(name = "进货日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date purchaseDate;
@ApiModelProperty("ExtAttr3")
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- @Excel(name = "ExtAttr3", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ @Excel(name = "ExtAttr3", width = 30, dateFormat = "yyyy-MM-dd")
private Date extAttr3;
@ApiModelProperty("ExtAttr4")
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- @Excel(name = "ExtAttr4", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+ @Excel(name = "ExtAttr4", width = 30, dateFormat = "yyyy-MM-dd")
private Date extAttr4;
@ApiModelProperty("物料更多属性列表(批次属性)")
From 49ab26a8e976c4c05d8c3ca6ea10ff6cda233c43 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Wed, 2 Sep 2026 18:33:50 +0800
Subject: [PATCH 53/87] =?UTF-8?q?fix(bms):=20=E5=8F=91=E7=A5=A8=E5=88=97?=
=?UTF-8?q?=E8=A1=A8=E6=9D=A1=E6=95=B0=E6=98=BE=E7=A4=BA=E4=B8=BA0?=
=?UTF-8?q?=EF=BC=8C=E6=B3=A8=E5=86=8CMyBatis-Plus=E5=88=86=E9=A1=B5?=
=?UTF-8?q?=E6=8B=A6=E6=88=AA=E5=99=A8=E4=BD=BFPage=E7=94=9F=E6=95=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../com/mhd/bms/config/MybatisPlusConfig.java | 22 +++++++++++++++++++
1 file changed, 22 insertions(+)
create mode 100644 mhd_bms/src/main/java/com/mhd/bms/config/MybatisPlusConfig.java
diff --git a/mhd_bms/src/main/java/com/mhd/bms/config/MybatisPlusConfig.java b/mhd_bms/src/main/java/com/mhd/bms/config/MybatisPlusConfig.java
new file mode 100644
index 000000000..553ba85e7
--- /dev/null
+++ b/mhd_bms/src/main/java/com/mhd/bms/config/MybatisPlusConfig.java
@@ -0,0 +1,22 @@
+package com.mhd.bms.config;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * MyBatis-Plus 分页插件配置
+ * 不注册该拦截器时,Mapper 里传入的 Page 不生效:SQL 不分页、total 恒为 0
+ */
+@Configuration
+public class MybatisPlusConfig {
+
+ @Bean
+ public PaginationInterceptor paginationInterceptor() {
+ PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
+ // 达梦数据库(不设置也会根据 jdbc:dm:// 自动识别,这里显式指定更稳妥)
+ paginationInterceptor.setDialectType(DbType.DM.getDb());
+ return paginationInterceptor;
+ }
+}
From 87dae51a15e9c779a6c826053b56f5a0c7af07a2 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Wed, 2 Sep 2026 19:31:01 +0800
Subject: [PATCH 54/87] =?UTF-8?q?fix(bms):=20=E5=8F=91=E7=A5=A8=E5=88=97?=
=?UTF-8?q?=E8=A1=A8=E5=85=BC=E5=AE=B9pageNum/pageNo=E5=8F=82=E6=95=B0?=
=?UTF-8?q?=E5=90=8D=EF=BC=8C=E4=BF=AE=E5=A4=8D=E7=BF=BB=E9=A1=B5=E5=A7=8B?=
=?UTF-8?q?=E7=BB=88=E8=BF=94=E5=9B=9E=E7=AC=AC=E4=B8=80=E9=A1=B5=EF=BC=9B?=
=?UTF-8?q?=E6=8E=92=E5=BA=8F=E8=A1=A5id=E5=85=9C=E5=BA=95=E9=98=B2?=
=?UTF-8?q?=E7=BF=BB=E9=A1=B5=E9=87=8D=E5=A4=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../mhd/bms/interfaces/facadeApi/BmsInvoiceListApi.java | 7 +++++--
mhd_bms/src/main/resources/mapper/BmsInvoiceListMapper.xml | 2 +-
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BmsInvoiceListApi.java b/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BmsInvoiceListApi.java
index cb4f790b5..9bee593e5 100644
--- a/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BmsInvoiceListApi.java
+++ b/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BmsInvoiceListApi.java
@@ -52,11 +52,14 @@ public class BmsInvoiceListApi extends BaseController {
@ApiOperation(value = "销项发票表-分页列表查询", notes = "销项发票表-分页列表查询")
@RequestMapping(value = "/queryList")
public Result> queryList(BmsInvoiceListQueryDTO bmsInvoiceListQueryDTO,
- @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+ @RequestParam(name="pageNo", required=false) Integer pageNo,
+ @RequestParam(name="pageNum", required=false) Integer pageNum,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
+ // 前端分页参数名不统一(pageNum / pageNo),两个都兼容,优先 pageNo
+ int currentPage = pageNo != null ? pageNo : (pageNum != null ? pageNum : 1);
Result> result = new Result>();
- Page pageList = new Page(pageNo,pageSize);
+ Page pageList = new Page(currentPage,pageSize);
pageList = bmsInvoiceListService.queryList(pageList, bmsInvoiceListQueryDTO);
result.setResult(pageList);
result.setSuccess(true);
diff --git a/mhd_bms/src/main/resources/mapper/BmsInvoiceListMapper.xml b/mhd_bms/src/main/resources/mapper/BmsInvoiceListMapper.xml
index 4f2eb2a0a..6cd8a897f 100644
--- a/mhd_bms/src/main/resources/mapper/BmsInvoiceListMapper.xml
+++ b/mhd_bms/src/main/resources/mapper/BmsInvoiceListMapper.xml
@@ -10,7 +10,7 @@
where a.is_delete = 0
group by a.id
- order by a.create_time desc
+ order by a.create_time desc, a.id desc
select
From b09b07978ffec2a52e55da390c3c8902c454a1f5 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Wed, 2 Sep 2026 19:43:48 +0800
Subject: [PATCH 55/87] =?UTF-8?q?fix(oms):=20=E5=87=BA=E5=BA=93=E5=AF=BC?=
=?UTF-8?q?=E5=85=A5=E6=89=B9=E6=AC=A1=E5=88=86=E9=85=8D=E4=BC=98=E5=8C=96?=
=?UTF-8?q?=EF=BC=9A=E6=89=B9=E6=AC=A1=E5=8F=B7=E4=BC=98=E5=85=88=E6=8E=92?=
=?UTF-8?q?=E5=BA=8F=E3=80=81=E7=A7=BB=E9=99=A4=E5=BD=92=E5=B1=9E=E6=A0=A1?=
=?UTF-8?q?=E9=AA=8C=E3=80=81=E5=BA=93=E5=AD=98=E4=B8=8D=E8=B6=B3=E7=BB=9F?=
=?UTF-8?q?=E4=B8=80=E6=8A=A5=E9=94=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
对 c1f483f0 出库导入指定仓库功能的迭代调整:
1. 移除物料仓库归属前置校验(countInventoryByWarehouse):物料档案全仓共享、
不属于任何仓库,仓库约束收敛到批次分配环节——分不到当前仓批次即报库存不足
2. getkcId 增加分配排序:同物料同仓多条可用库存时,有批次号的优先、空批次
沉底、同组按库存ID(入库先后);此前无排序随机取第一条,会分到无批次号的
历史脏数据记录
3. 明细仓库编码/名称兜底:部分历史库存记录只存仓库ID未存编码/名称,按ID
反查仓库表补齐,修复明细仓库只显示ID不显示名称
4. 库存校验改收集式:全部物料批次比较完成后统一报出不足物料清单,原为逐行
分配时立即抛错,首个不足即中断、后续物料不参与比较
---
.../ExecutionStockInOrderImpl.java | 20 --------
.../mapper/ReservationStockInOrderMapper.java | 6 ---
.../ReservationStockInOrderImpl.java | 50 ++++++++++++-------
.../ReservationStockInOrderMapper.xml | 7 +--
4 files changed, 35 insertions(+), 48 deletions(-)
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/repository/persistence/ExecutionStockInOrderImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/repository/persistence/ExecutionStockInOrderImpl.java
index d12764de6..c92312bea 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/repository/persistence/ExecutionStockInOrderImpl.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockInOrder/repository/persistence/ExecutionStockInOrderImpl.java
@@ -259,26 +259,6 @@ public class ExecutionStockInOrderImpl extends ServiceImpl 0) {
- String warehouseName = reservationStockInOrderMapper.getWarehouseName(warehouseId);
- List wrongWarehouseMaterials = new ArrayList<>();
- for (ProductDetail productDetail : productDetailList) {
- MaterialBaseInfoPO materialBaseInfoPO = stockInOrderMapper.getByCode(productDetail.getProductCode());
- if (materialBaseInfoPO == null) {
- continue;
- }
- int count = reservationStockInOrderMapper.countInventoryByWarehouse(materialBaseInfoPO.getMaterialBaseInfoId(), warehouseId);
- if (count <= 0) {
- wrongWarehouseMaterials.add(productDetail.getProductCode());
- }
- }
- if (!wrongWarehouseMaterials.isEmpty()) {
- throw new Exception("物料[" + String.join("、", wrongWarehouseMaterials) + "]在当前仓库["
- + (warehouseName == null ? warehouseId : warehouseName) + "]没有库存记录,无法从该仓库出库,请确认导入仓库是否正确");
- }
- }
-
ExecutionStockOutOrderDO reservationStockOutOrderDO = new ExecutionStockOutOrderDO();
reservationStockOutOrderDO.setOutOrderNumber(OrderSequence.getOrderCode("CK"));
reservationStockOutOrderDO.setShipperId((Long) shipperIds.get(0).get("shipperId"));
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/mapper/ReservationStockInOrderMapper.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/mapper/ReservationStockInOrderMapper.java
index 95c8d9bc2..6749cbfc2 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/mapper/ReservationStockInOrderMapper.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/mapper/ReservationStockInOrderMapper.java
@@ -37,12 +37,6 @@ public interface ReservationStockInOrderMapper extends BaseMapper getkcId(@Param("id") Long id,@Param("q") BigDecimal q, @Param("warehouseId") Long warehouseId);
- /**
- * 出库导入校验:物料在指定仓库是否存在库存记录(存在即视为归属该仓库,不限数量)
- * @return 库存记录数
- */
- public int countInventoryByWarehouse(@Param("id") Long id, @Param("warehouseId") Long warehouseId);
-
public MaterialWarehouseControlPO getInfoByMaterialBaseInfoIds(@Param("id") Long id);
public MaterialGoodsRulePO getGoodsInfoByMaterialBaseInfoIds(@Param("id") Long id);
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java
index 44e1cf151..9d7774ba5 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java
@@ -309,24 +309,9 @@ public class ReservationStockInOrderImpl extends ServiceImpl 0) {
- String warehouseName = stockInOrderMapper.getWarehouseName(warehouseId);
- List wrongWarehouseMaterials = new ArrayList<>();
- for (MaterialBaseInfoPO materialBaseInfoPO : materialCache.values()) {
- int count = stockInOrderMapper.countInventoryByWarehouse(materialBaseInfoPO.getMaterialBaseInfoId(), warehouseId);
- if (count <= 0) {
- wrongWarehouseMaterials.add(materialBaseInfoPO.getMaterialCode());
- }
- }
- if (!wrongWarehouseMaterials.isEmpty()) {
- throw new Exception("物料[" + String.join("、", wrongWarehouseMaterials) + "]在当前仓库["
- + (warehouseName == null ? warehouseId : warehouseName) + "]没有库存记录,无法从该仓库出库,请确认导入仓库是否正确");
- }
- }
-
// ====== 后续处理(编号均已存在):货主归属校验、建单落库 ======
+ // 物料档案全仓共享、不属于任何仓库;仓库约束在下方"分配批次"环节生效:
+ // getkcId 按 warehouseId 过滤,分不到当前仓库的批次即报"批次库存数量少于出库数量",不会取到其他仓库的库存
for (MaterialBaseInfoPO materialBaseInfoPO : materialCache.values()) {
if (materialBaseInfoPO.getShipperId() != null && processedShipperIds.add(materialBaseInfoPO.getShipperId())) {
Map shipper = new HashMap<>();
@@ -347,6 +332,28 @@ public class ReservationStockInOrderImpl extends ServiceImpl insufficientMaterials = new HashSet<>();
+ for (ProductDetail productDetail : productDetailList) {
+ MaterialBaseInfoPO materialBaseInfoPO = materialCache.get(productDetail.getProductCode());
+ if (materialBaseInfoPO == null) {
+ continue; // 存在性已在前面统一校验
+ }
+ BigDecimal requireQty = new BigDecimal(productDetail.getPieceCount()).setScale(2, BigDecimal.ROUND_HALF_UP);
+ List inventoryList = stockInOrderMapper.getkcId(
+ materialBaseInfoPO.getMaterialBaseInfoId(), requireQty, warehouseId);
+ if (inventoryList == null || inventoryList.isEmpty()) {
+ insufficientMaterials.add(productDetail.getProductCode());
+ }
+ }
+ if (!insufficientMaterials.isEmpty()) {
+ throw new Exception("物料[" + String.join("、", insufficientMaterials) + "]"
+ + (warehouseId != null && warehouseId > 0 ? "在当前仓库" : "") + "批次库存数量少于出库数量!");
+ }
+ }
+
ReservationStockOutOrderDO reservationStockOutOrderDO = new ReservationStockOutOrderDO();
// 生成出库业务单号
String orderNumber = reservationStockOutOrderApplicationService.generateReserveOrderNumber();
@@ -415,6 +422,15 @@ public class ReservationStockInOrderImpl extends ServiceImpl 0) {
+ if (warehouseCode == null || warehouseCode.trim().isEmpty()) {
+ warehouseCode = stockInOrderMapper.getWarehouseCode(invWarehouseId);
+ }
+ if (warehouseName == null || warehouseName.trim().isEmpty()) {
+ warehouseName = stockInOrderMapper.getWarehouseName(invWarehouseId);
+ }
+ }
String inOrderNumber = reservationMaterialInventoryPO.getInOrderNumber();
BigDecimal inventoryQuantity = reservationMaterialInventoryPO.getInventoryQuantity();
String unit = reservationMaterialInventoryPO.getUnit();
diff --git a/mhd_oms/src/main/resources/mapper/reservationStockInOrder/ReservationStockInOrderMapper.xml b/mhd_oms/src/main/resources/mapper/reservationStockInOrder/ReservationStockInOrderMapper.xml
index f2d601503..bc72a3926 100644
--- a/mhd_oms/src/main/resources/mapper/reservationStockInOrder/ReservationStockInOrderMapper.xml
+++ b/mhd_oms/src/main/resources/mapper/reservationStockInOrder/ReservationStockInOrderMapper.xml
@@ -559,11 +559,8 @@
and WAREHOUSE_ID = #{warehouseId}
-
-
-
- select count(1) from "NGWL_TEST_WMS".MATERIAL_INVENTORY
- where 1 = 1 and DEL_FLAG = 1 and MATERIAL_BASE_INFO_ID = #{id} and WAREHOUSE_ID = #{warehouseId}
+
+ order by (case when BATCH_NUMBER is null or BATCH_NUMBER = '' then 1 else 0 end), MATERIAL_INVENTORY_ID asc
select CUSTOMER_NC_CODE from "NGWL_TEST_USER".USER_SHIPPER where 1 = 1 and DEL_FLAG = 1 and USER_ID = #{id} limit 1
From 03ce38ed9b9673bbb3683f2ab198f68cc264e16e Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Wed, 2 Sep 2026 19:46:44 +0800
Subject: [PATCH 56/87] =?UTF-8?q?=E5=8F=91=2030?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
mhd_oms/src/main/resources/bootstrap.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/mhd_oms/src/main/resources/bootstrap.yml b/mhd_oms/src/main/resources/bootstrap.yml
index 542b6bce7..ee058f0f6 100644
--- a/mhd_oms/src/main/resources/bootstrap.yml
+++ b/mhd_oms/src/main/resources/bootstrap.yml
@@ -19,14 +19,14 @@ spring:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.31:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
config:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.31:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From 57312753ed777282466d0a4e4e2a5922237dba9e Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Wed, 2 Sep 2026 19:52:47 +0800
Subject: [PATCH 57/87] =?UTF-8?q?=E5=8F=91=2030?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/com/mhd/system/api/BmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/OmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WlhyServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/YmsServiceFeign.java | 2 +-
.../java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java | 2 +-
.../mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java | 2 +-
7 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
index 8cc8bfd57..e18484e8d 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
@@ -18,7 +18,7 @@ import java.util.Set;
/**
* bms财务结算系统feign调用接口
*/
-@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.32:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.3:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface BmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
index 4ef3bed80..e9418197a 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.concurrent.CompletableFuture;
-@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.33:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.4:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface OmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
index d976fcc98..de19e469b 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
@@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
-@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.102.192.31:8014",configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "commonWlhyServiceFeign",url = "http://10.102.192.30:8014",value = ServiceNameConstants.WLHY_SERVICE,configuration = FeignAutoConfiguration.class)
public interface WlhyServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
index 1fe69a003..26a92624c 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
@@ -21,7 +21,7 @@ import java.util.Map;
* @description: TODO
* @date 2024/5/10 8:58
**/
-@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.32:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.3:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface WmsServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
index 750ed853e..12571141a 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
@@ -9,7 +9,7 @@ import com.mhd.system.api.feign.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
-@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.33:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.4:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface YmsServiceFeign {
/**
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
index 509644885..6238639f6 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
@@ -26,7 +26,7 @@ import java.io.InputStream;
import java.util.List;
import java.util.Map;
-@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.31:8012", configuration = FeignAutoConfiguration.class)
+@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.30:8012", configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
index 8c86ae1ad..ca93d3312 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
@@ -22,7 +22,7 @@ import java.util.Map;
/**
* 三方服务 Feign
*/
-@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.31:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.30:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
From a8815ade02530146c857c5524d3a3f675d40e48a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com>
Date: Wed, 2 Sep 2026 20:28:59 +0800
Subject: [PATCH 58/87] =?UTF-8?q?App=E6=B8=B8=E5=AE=A2=E6=97=B6=E6=AD=A3?=
=?UTF-8?q?=E5=B8=B8=E5=B1=95=E7=A4=BA=E9=A1=B5=E9=9D=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../appMenu/AppMenuApplicationService.java | 19 ++++++++++++++-----
mhd_product/src/main/resources/bootstrap.yml | 8 ++++----
.../mapper/appMenu/AppMenuMapper.xml | 3 +++
3 files changed, 21 insertions(+), 9 deletions(-)
diff --git a/mhd_product/src/main/java/com/linke/product/application/service/appMenu/AppMenuApplicationService.java b/mhd_product/src/main/java/com/linke/product/application/service/appMenu/AppMenuApplicationService.java
index 2c188f6a9..76cc89b36 100644
--- a/mhd_product/src/main/java/com/linke/product/application/service/appMenu/AppMenuApplicationService.java
+++ b/mhd_product/src/main/java/com/linke/product/application/service/appMenu/AppMenuApplicationService.java
@@ -87,13 +87,22 @@ public class AppMenuApplicationService {
if (StringUtils.isBlank(appMenuDO.getAppPackage()) || StringUtils.isBlank(appMenuDO.getAppLocationCode())){
throw new ServiceException("app包名或app位置不能为空");
}
- if (appMenuDO.getUserId() == null){
- appMenuDO.setUserId(SecurityUtils.getUserId());
- }
- if (appMenuDO.getTopOrganizationId() == null){
- appMenuDO.setTopOrganizationId(SecurityUtils.getLoginUser().getUserPo().getTopOrganizationId());
+ // 判断是否为已登录用户(小程序未登录访问时,getLoginUser/getUserPo 可能为空)
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ boolean isLogin = loginUser != null && loginUser.getUserPo() != null;
+ if (isLogin) {
+ if (appMenuDO.getUserId() == null){
+ appMenuDO.setUserId(SecurityUtils.getUserId());
+ }
+ if (appMenuDO.getTopOrganizationId() == null){
+ appMenuDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
+ }
}
+ // 未登录(游客):userId/topOrganizationId 保持为空,走公共菜单查询,返回该 app 全部菜单
List menuPos = appMenuDomainService.queryMenuListByApp(appMenuDO);
+ if (!isLogin) {
+ return menuPos != null ? menuPos : new ArrayList<>();
+ }
// 获取用户角色 → 查角色APP菜单权限 → 取交集去重
List userRoles = userFeignService.selectUserRoles(appMenuDO.getUserId());
menuPos = filterMenuByUserRole(menuPos, userRoles);
diff --git a/mhd_product/src/main/resources/bootstrap.yml b/mhd_product/src/main/resources/bootstrap.yml
index 8e302d143..07b279b1a 100644
--- a/mhd_product/src/main/resources/bootstrap.yml
+++ b/mhd_product/src/main/resources/bootstrap.yml
@@ -18,18 +18,18 @@ spring:
cloud:
nacos:
discovery:
- server-addr: 127.0.0.1:8848
+# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
-# server-addr: 10.102.192.31:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
# server-addr: 10.33.0.129:6010
#
config:
- server-addr: 127.0.0.1:8848
+# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
-# server-addr: 10.102.192.31:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
diff --git a/mhd_product/src/main/resources/mapper/appMenu/AppMenuMapper.xml b/mhd_product/src/main/resources/mapper/appMenu/AppMenuMapper.xml
index abddc0176..b9e3148aa 100644
--- a/mhd_product/src/main/resources/mapper/appMenu/AppMenuMapper.xml
+++ b/mhd_product/src/main/resources/mapper/appMenu/AppMenuMapper.xml
@@ -99,7 +99,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and me.menu_show = 1
and co.app_package = #{appPackage}
and me.app_location_code = #{appLocationCode}
+
+
and me.top_organization_id = #{topOrganizationId}
+
order by me.menu_sort,me.create_time asc
\ No newline at end of file
From bfffc6bbf1b6d6eebee2d9832af4d76c50391495 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com>
Date: Wed, 2 Sep 2026 20:46:31 +0800
Subject: [PATCH 59/87] =?UTF-8?q?App=E6=B8=B8=E5=AE=A2=E6=97=B6=E6=AD=A3?=
=?UTF-8?q?=E5=B8=B8=E5=B1=95=E7=A4=BA=E6=B6=88=E6=81=AF=E9=A1=B5=E9=9D=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../MessageManageApplicationService.java | 24 ++++++++++++++++++-
.../src/main/resources/bootstrap.yml | 8 +++----
2 files changed, 27 insertions(+), 5 deletions(-)
diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/MessageManageApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/MessageManageApplicationService.java
index afa11d0ef..62703d4b2 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/MessageManageApplicationService.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/MessageManageApplicationService.java
@@ -461,7 +461,8 @@ public class MessageManageApplicationService
//获取当前登录人
LoginUser loginUser = SecurityUtils.getLoginUser();
if(null == loginUser){
- throw new ServiceException("获取登录人失败");
+ //未登录(游客):返回空消息中心结构,保证小程序界面正常展示而不报错
+ return buildEmptyAppNoticeList();
}
noticeMessageLoggingDo.setUserId(loginUser.getUserid());
//获取每种类型的最新一条
@@ -522,6 +523,27 @@ public class MessageManageApplicationService
return result;
}
+ /**
+ * 未登录(游客)时返回空的消息中心结构,避免前端页面因无登录上下文而报错
+ * @return NoticeMessageLoggingAppListPo
+ */
+ private NoticeMessageLoggingAppListPo buildEmptyAppNoticeList() {
+ NoticeMessageLoggingAppListPo result = new NoticeMessageLoggingAppListPo();
+ NoticeMessageLoggingAppListPo.CommonNotice serviceNotice = new NoticeMessageLoggingAppListPo.CommonNotice();
+ serviceNotice.setUnreadNum("0");
+ NoticeMessageLoggingAppListPo.CommonNotice activityNotice = new NoticeMessageLoggingAppListPo.CommonNotice();
+ activityNotice.setUnreadNum("0");
+ NoticeMessageLoggingAppListPo.CommonNotice logisticsNotice = new NoticeMessageLoggingAppListPo.CommonNotice();
+ logisticsNotice.setUnreadNum("0");
+ NoticeMessageLoggingAppListPo.CommonNotice systemNotice = new NoticeMessageLoggingAppListPo.CommonNotice();
+ systemNotice.setUnreadNum("0");
+ result.setServiceNotice(serviceNotice);
+ result.setActivityNotice(activityNotice);
+ result.setLogisticsNotice(logisticsNotice);
+ result.setSystemNotice(systemNotice);
+ return result;
+ }
+
/**
* APP根据类型获取消息通知
* @param noticeMessageLoggingDo
diff --git a/mhd-modules/mhd-system/src/main/resources/bootstrap.yml b/mhd-modules/mhd-system/src/main/resources/bootstrap.yml
index dc450c4ce..b1b1ca982 100644
--- a/mhd-modules/mhd-system/src/main/resources/bootstrap.yml
+++ b/mhd-modules/mhd-system/src/main/resources/bootstrap.yml
@@ -13,17 +13,17 @@ spring:
cloud:
nacos:
discovery:
- server-addr: 127.0.0.1:8848
+# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
-# server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
# server-addr: 10.102.192.105:6848
config:
- server-addr: 127.0.0.1:8848
+# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
-# server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From b5f710cd33497b3e8374964da611285168822bb8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com>
Date: Wed, 2 Sep 2026 20:49:09 +0800
Subject: [PATCH 60/87] 31
---
.../src/main/java/com/mhd/system/api/BmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/OmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WlhyServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/YmsServiceFeign.java | 2 +-
.../com/mhd/common/core/feign/ThirdPartyServiceFeign.java | 2 +-
mhd-modules/mhd-system/src/main/resources/bootstrap.yml | 4 ++--
.../mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java | 2 +-
mhd_product/src/main/resources/bootstrap.yml | 4 ++--
9 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
index e18484e8d..8cc8bfd57 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
@@ -18,7 +18,7 @@ import java.util.Set;
/**
* bms财务结算系统feign调用接口
*/
-@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.3:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.32:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface BmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
index e9418197a..4ef3bed80 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.concurrent.CompletableFuture;
-@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.4:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.33:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface OmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
index de19e469b..d852e89bc 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
@@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
-@FeignClient(contextId = "commonWlhyServiceFeign",url = "http://10.102.192.30:8014",value = ServiceNameConstants.WLHY_SERVICE,configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "commonWlhyServiceFeign",url = "http://10.102.192.31:8014",value = ServiceNameConstants.WLHY_SERVICE,configuration = FeignAutoConfiguration.class)
public interface WlhyServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
index 26a92624c..1fe69a003 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
@@ -21,7 +21,7 @@ import java.util.Map;
* @description: TODO
* @date 2024/5/10 8:58
**/
-@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.3:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.32:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface WmsServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
index 12571141a..750ed853e 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
@@ -9,7 +9,7 @@ import com.mhd.system.api.feign.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
-@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.4:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.33:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface YmsServiceFeign {
/**
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
index 6238639f6..509644885 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
@@ -26,7 +26,7 @@ import java.io.InputStream;
import java.util.List;
import java.util.Map;
-@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.30:8012", configuration = FeignAutoConfiguration.class)
+@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.31:8012", configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd-modules/mhd-system/src/main/resources/bootstrap.yml b/mhd-modules/mhd-system/src/main/resources/bootstrap.yml
index b1b1ca982..99aaf5e4c 100644
--- a/mhd-modules/mhd-system/src/main/resources/bootstrap.yml
+++ b/mhd-modules/mhd-system/src/main/resources/bootstrap.yml
@@ -15,7 +15,7 @@ spring:
discovery:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
@@ -23,7 +23,7 @@ spring:
config:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
diff --git a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
index ca93d3312..8c86ae1ad 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
@@ -22,7 +22,7 @@ import java.util.Map;
/**
* 三方服务 Feign
*/
-@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.30:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.31:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_product/src/main/resources/bootstrap.yml b/mhd_product/src/main/resources/bootstrap.yml
index 07b279b1a..521cfaa6f 100644
--- a/mhd_product/src/main/resources/bootstrap.yml
+++ b/mhd_product/src/main/resources/bootstrap.yml
@@ -20,7 +20,7 @@ spring:
discovery:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
@@ -29,7 +29,7 @@ spring:
config:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From 4f45a735058a55e00492cec7e81f581663f4ed7c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com>
Date: Thu, 3 Sep 2026 00:26:45 +0800
Subject: [PATCH 61/87] =?UTF-8?q?=E5=B7=B2=E7=99=BB=E5=BD=95=E8=B4=A6?=
=?UTF-8?q?=E5=8F=B7APP=E8=8F=9C=E5=8D=95=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../application/service/appMenu/AppMenuApplicationService.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/mhd_product/src/main/java/com/linke/product/application/service/appMenu/AppMenuApplicationService.java b/mhd_product/src/main/java/com/linke/product/application/service/appMenu/AppMenuApplicationService.java
index 76cc89b36..ded62eab6 100644
--- a/mhd_product/src/main/java/com/linke/product/application/service/appMenu/AppMenuApplicationService.java
+++ b/mhd_product/src/main/java/com/linke/product/application/service/appMenu/AppMenuApplicationService.java
@@ -92,7 +92,8 @@ public class AppMenuApplicationService {
boolean isLogin = loginUser != null && loginUser.getUserPo() != null;
if (isLogin) {
if (appMenuDO.getUserId() == null){
- appMenuDO.setUserId(SecurityUtils.getUserId());
+ // 用 token 中解析出的真实用户ID,避免依赖网关 header(未注入时 SecurityUtils.getUserId() 会返回 0)
+ appMenuDO.setUserId(loginUser.getUserid());
}
if (appMenuDO.getTopOrganizationId() == null){
appMenuDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
From 3a5af634dde5336516a65b742863dced58d06a39 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com>
Date: Thu, 3 Sep 2026 00:29:18 +0800
Subject: [PATCH 62/87] 30
---
.../src/main/java/com/mhd/system/api/BmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/OmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WlhyServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/YmsServiceFeign.java | 2 +-
.../com/mhd/common/core/feign/ThirdPartyServiceFeign.java | 2 +-
.../mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java | 2 +-
mhd_product/src/main/resources/bootstrap.yml | 4 ++--
8 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
index 8cc8bfd57..e18484e8d 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
@@ -18,7 +18,7 @@ import java.util.Set;
/**
* bms财务结算系统feign调用接口
*/
-@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.32:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.3:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface BmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
index 4ef3bed80..e9418197a 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.concurrent.CompletableFuture;
-@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.33:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.4:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface OmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
index d852e89bc..de19e469b 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
@@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
-@FeignClient(contextId = "commonWlhyServiceFeign",url = "http://10.102.192.31:8014",value = ServiceNameConstants.WLHY_SERVICE,configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "commonWlhyServiceFeign",url = "http://10.102.192.30:8014",value = ServiceNameConstants.WLHY_SERVICE,configuration = FeignAutoConfiguration.class)
public interface WlhyServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
index 1fe69a003..26a92624c 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
@@ -21,7 +21,7 @@ import java.util.Map;
* @description: TODO
* @date 2024/5/10 8:58
**/
-@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.32:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.3:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface WmsServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
index 750ed853e..12571141a 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
@@ -9,7 +9,7 @@ import com.mhd.system.api.feign.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
-@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.33:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.4:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface YmsServiceFeign {
/**
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
index 509644885..6238639f6 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
@@ -26,7 +26,7 @@ import java.io.InputStream;
import java.util.List;
import java.util.Map;
-@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.31:8012", configuration = FeignAutoConfiguration.class)
+@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.30:8012", configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
index 8c86ae1ad..ca93d3312 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
@@ -22,7 +22,7 @@ import java.util.Map;
/**
* 三方服务 Feign
*/
-@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.31:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.30:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_product/src/main/resources/bootstrap.yml b/mhd_product/src/main/resources/bootstrap.yml
index 521cfaa6f..07b279b1a 100644
--- a/mhd_product/src/main/resources/bootstrap.yml
+++ b/mhd_product/src/main/resources/bootstrap.yml
@@ -20,7 +20,7 @@ spring:
discovery:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.31:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
@@ -29,7 +29,7 @@ spring:
config:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.31:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From 28bf58e8d17c8080eef64fc2b35ab689d60536e9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com>
Date: Thu, 3 Sep 2026 11:28:22 +0800
Subject: [PATCH 63/87] =?UTF-8?q?BI=E6=9F=A5=E8=AF=A2YMS=E6=9C=88=E5=8F=B0?=
=?UTF-8?q?=E7=AE=A1=E7=90=86=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2=E5=BC=80?=
=?UTF-8?q?=E5=8F=91=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../mapper/BiPlatformRealDataMapper.java | 4 ++
.../repository/po/RealPlatformInfoPO.java | 59 +++++++++++++++++++
.../service/BiPlatformRealDataService.java | 13 ++++
.../facadeApi/biReport/BiReportApi.java | 11 ++++
.../BiPlatformRealDataMapper.xml | 23 ++++++++
5 files changed, 110 insertions(+)
create mode 100644 mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/po/RealPlatformInfoPO.java
diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/mapper/BiPlatformRealDataMapper.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/mapper/BiPlatformRealDataMapper.java
index 1f283297c..3a4c041e8 100644
--- a/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/mapper/BiPlatformRealDataMapper.java
+++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/mapper/BiPlatformRealDataMapper.java
@@ -6,6 +6,7 @@ import com.mhd.bi.domain.biPlatformRealData.repository.po.RealVehicleStatusPO;
import com.mhd.bi.domain.biPlatformRealData.repository.po.RealTaskLoadPO;
import com.mhd.bi.domain.biPlatformRealData.repository.po.RealBusinessTypeStatPO;
import com.mhd.bi.domain.biPlatformRealData.repository.po.RealPlatformFloorStatPO;
+import com.mhd.bi.domain.biPlatformRealData.repository.po.RealPlatformInfoPO;
import java.util.List;
@@ -39,4 +40,7 @@ public interface BiPlatformRealDataMapper {
/** 月台监控-按楼层统计月台车辆(楼层、月台数量、今日预约车辆、当前作业车辆) */
List queryPlatformFloorStats();
+
+ /** 月台管理列表(YMS qms_window_info,含机构/鹤位/状态/楼层/UUID 等完整信息) */
+ List queryPlatformInfoList();
}
\ No newline at end of file
diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/po/RealPlatformInfoPO.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/po/RealPlatformInfoPO.java
new file mode 100644
index 000000000..01e22eadb
--- /dev/null
+++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/po/RealPlatformInfoPO.java
@@ -0,0 +1,59 @@
+package com.mhd.bi.domain.biPlatformRealData.repository.po;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 月台管理列表(真实数据,来自 TEST_NGWL_YMS.QMS_WINDOW_INFO)
+ * 对应 YMS qms_window_info 月台/鹤位窗口表
+ */
+@Data
+public class RealPlatformInfoPO implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /** 主键 */
+ private Long id;
+
+ /** 机构代码(org_no) */
+ private String orgNo;
+
+ /** 机构名称(dept_name) */
+ private String deptName;
+
+ /** 鹤位号/月台号(window_number) */
+ private String windowNumber;
+
+ /** 鹤位名称/月台名称(window_name) */
+ private String windowName;
+
+ /** 优先级别(priority_set) */
+ private String prioritySet;
+
+ /** 鹤位状态/月台状态(running_status) */
+ private String runningStatus;
+
+ /** uuid */
+ private String uuid;
+
+ /** 鹤位屏名字集合/绑定月台屏(berr_names) */
+ private String berrNames;
+
+ /** 最新业务状态(new_flow_status) */
+ private String newFlowStatus;
+
+ /** 月台图片(guide_images) */
+ private String guideImages;
+
+ /** 月台楼层(platform_floor) */
+ private String platformFloor;
+
+ /** 作业状态 0-空闲 1-占用(job_status) */
+ private Integer jobStatus;
+
+ /** 创建者(create_by_name) */
+ private String createByName;
+
+ /** 创建时间 */
+ private String createTime;
+}
diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/service/BiPlatformRealDataService.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/service/BiPlatformRealDataService.java
index fecadf30b..703c71e2a 100644
--- a/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/service/BiPlatformRealDataService.java
+++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/service/BiPlatformRealDataService.java
@@ -8,6 +8,7 @@ import com.mhd.bi.domain.biPlatformRealData.repository.po.RealVehicleStatusPO;
import com.mhd.bi.domain.biPlatformRealData.repository.po.RealTaskLoadPO;
import com.mhd.bi.domain.biPlatformRealData.repository.po.RealBusinessTypeStatPO;
import com.mhd.bi.domain.biPlatformRealData.repository.po.RealPlatformFloorStatPO;
+import com.mhd.bi.domain.biPlatformRealData.repository.po.RealPlatformInfoPO;
import com.mhd.bi.domain.biPlatformSurveillance.repository.mapper.BiPlatformSurveillanceReportMapper;
import com.mhd.bi.domain.biSnapshotSync.repository.mapper.BiSnapshotWriteMapper;
import com.mhd.bi.domain.biSnapshotSync.support.BiSnapshotWeeklyRandomDataBuilder;
@@ -230,6 +231,18 @@ public class BiPlatformRealDataService {
}
}
+ /**
+ * 月台管理列表:实时查 YMS qms_window_info,返回月台/鹤位窗口完整信息,不落库。
+ */
+ public List queryPlatformInfoList() {
+ try {
+ return biPlatformRealDataMapper.queryPlatformInfoList();
+ } catch (Exception e) {
+ log.error("【YMS】查询月台管理列表失败: {}", e.getMessage(), e);
+ return java.util.Collections.emptyList();
+ }
+ }
+
/**
* 实时组装月台监测数据:原则「有真实数据源用真实,无真实数据源用写死模拟」。
* 有真实数据源的字段(vehicles / platformOverview / vehicleStatus / taskLoad / taskTotal)
diff --git a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/BiReportApi.java b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/BiReportApi.java
index 0375dc7d6..38a6778b4 100644
--- a/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/BiReportApi.java
+++ b/mhd-bi/src/main/java/com/mhd/bi/interfaces/facadeApi/biReport/BiReportApi.java
@@ -6,6 +6,7 @@ import com.mhd.bi.domain.biPlatformSurveillance.service.BiPlatformSurveillanceRe
import com.mhd.bi.domain.biPlatformRealData.service.BiPlatformRealDataService;
import com.mhd.bi.domain.biPlatformRealData.repository.po.RealBusinessTypeStatPO;
import com.mhd.bi.domain.biPlatformRealData.repository.po.RealPlatformFloorStatPO;
+import com.mhd.bi.domain.biPlatformRealData.repository.po.RealPlatformInfoPO;
import com.mhd.bi.domain.biOverallOperation.service.BiOverallOperationReportService;
import com.mhd.bi.domain.biHkMacaoServiceZone.service.BiHkMacaoServiceZoneReportService;
import com.mhd.bi.domain.biTransportOperationZone.service.BiTransportOperationZoneReportService;
@@ -128,6 +129,16 @@ public class BiReportApi extends BaseController {
List data = biPlatformRealDataService.queryPlatformFloorStats();
return BiApiResult.ok(data);
}
+
+ /**
+ * 月台管理列表(实时查 YMS qms_window_info,不落库)
+ */
+ @ApiOperation(value = "月台管理列表", notes = "实时查询 YMS 库 qms_window_info,返回月台/鹤位窗口列表(机构、月台号、月台名称、楼层、绑定屏、UUID、状态等),不落库")
+ @GetMapping("/platformInfoList")
+ public BiApiResult> platformInfoList() {
+ List data = biPlatformRealDataService.queryPlatformInfoList();
+ return BiApiResult.ok(data);
+ }
//园区物流大屏接口----------------------------------------------------------------------
/**
* 总体运营态势
diff --git a/mhd-bi/src/main/resources/mapper/biPlatformRealData/BiPlatformRealDataMapper.xml b/mhd-bi/src/main/resources/mapper/biPlatformRealData/BiPlatformRealDataMapper.xml
index 31fda7186..0f5c970e1 100644
--- a/mhd-bi/src/main/resources/mapper/biPlatformRealData/BiPlatformRealDataMapper.xml
+++ b/mhd-bi/src/main/resources/mapper/biPlatformRealData/BiPlatformRealDataMapper.xml
@@ -113,4 +113,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
GROUP BY EXTRACT(HOUR FROM ENTRY_TIME)
ORDER BY EXTRACT(HOUR FROM ENTRY_TIME)
+
+
+
+ SELECT
+ w.ID AS id,
+ w.ORG_NO AS orgNo,
+ w.DEPT_NAME AS deptName,
+ w.WINDOW_NUMBER AS windowNumber,
+ w.WINDOW_NAME AS windowName,
+ w.PRIORITY_SET AS prioritySet,
+ w.RUNNING_STATUS AS runningStatus,
+ w.UUID AS uuid,
+ w.BERR_NAMES AS berrNames,
+ w.NEW_FLOW_STATUS AS newFlowStatus,
+ w.GUIDE_IMAGES AS guideImages,
+ w.PLATFORM_FLOOR AS platformFloor,
+ w.JOB_STATUS AS jobStatus,
+ w.CREATE_BY_NAME AS createByName,
+ TO_CHAR(w.CREATE_TIME, 'YYYY-MM-DD HH24:MI:SS') AS createTime
+ FROM NGWL_TEST_YMS.QMS_WINDOW_INFO w
+ ORDER BY w.PLATFORM_FLOOR, w.WINDOW_NUMBER
+
\ No newline at end of file
From 3880755df085c124a6483c9e7253d71c930e893d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com>
Date: Thu, 3 Sep 2026 11:35:33 +0800
Subject: [PATCH 64/87] =?UTF-8?q?BI=E6=9F=A5=E8=AF=A2YMS=E6=9C=88=E5=8F=B0?=
=?UTF-8?q?=E7=AE=A1=E7=90=86=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2=E5=BC=80?=
=?UTF-8?q?=E5=8F=91=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../repository/po/RealPlatformInfoPO.java | 6 +--
.../BiPlatformRealDataMapper.xml | 46 +++++++++++--------
2 files changed, 30 insertions(+), 22 deletions(-)
diff --git a/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/po/RealPlatformInfoPO.java b/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/po/RealPlatformInfoPO.java
index 01e22eadb..2a1f971e3 100644
--- a/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/po/RealPlatformInfoPO.java
+++ b/mhd-bi/src/main/java/com/mhd/bi/domain/biPlatformRealData/repository/po/RealPlatformInfoPO.java
@@ -51,9 +51,9 @@ public class RealPlatformInfoPO implements Serializable {
/** 作业状态 0-空闲 1-占用(job_status) */
private Integer jobStatus;
- /** 创建者(create_by_name) */
- private String createByName;
+ /** 创建人(create_by) */
+ private String createBy;
- /** 创建时间 */
+ /** 创建时间(create_time) */
private String createTime;
}
diff --git a/mhd-bi/src/main/resources/mapper/biPlatformRealData/BiPlatformRealDataMapper.xml b/mhd-bi/src/main/resources/mapper/biPlatformRealData/BiPlatformRealDataMapper.xml
index 0f5c970e1..0c3f51c5d 100644
--- a/mhd-bi/src/main/resources/mapper/biPlatformRealData/BiPlatformRealDataMapper.xml
+++ b/mhd-bi/src/main/resources/mapper/biPlatformRealData/BiPlatformRealDataMapper.xml
@@ -114,26 +114,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
ORDER BY EXTRACT(HOUR FROM ENTRY_TIME)
-
+
SELECT
- w.ID AS id,
- w.ORG_NO AS orgNo,
- w.DEPT_NAME AS deptName,
- w.WINDOW_NUMBER AS windowNumber,
- w.WINDOW_NAME AS windowName,
- w.PRIORITY_SET AS prioritySet,
- w.RUNNING_STATUS AS runningStatus,
- w.UUID AS uuid,
- w.BERR_NAMES AS berrNames,
- w.NEW_FLOW_STATUS AS newFlowStatus,
- w.GUIDE_IMAGES AS guideImages,
- w.PLATFORM_FLOOR AS platformFloor,
- w.JOB_STATUS AS jobStatus,
- w.CREATE_BY_NAME AS createByName,
- TO_CHAR(w.CREATE_TIME, 'YYYY-MM-DD HH24:MI:SS') AS createTime
- FROM NGWL_TEST_YMS.QMS_WINDOW_INFO w
- ORDER BY w.PLATFORM_FLOOR, w.WINDOW_NUMBER
+ a.ID AS id,
+ a.ORG_NO AS orgNo,
+ d.DEPT_NAME AS deptName,
+ a.WINDOW_NUMBER AS windowNumber,
+ a.WINDOW_NAME AS windowName,
+ a.PRIORITY_SET AS prioritySet,
+ a.RUNNING_STATUS AS runningStatus,
+ a.CREATE_BY AS createBy,
+ TO_CHAR(a.CREATE_TIME, 'YYYY-MM-DD HH24:MI:SS') AS createTime,
+ a.UUID AS uuid,
+ a.GUIDE_IMAGES AS guideImages,
+ a.PLATFORM_FLOOR AS platformFloor,
+ a.JOB_STATUS AS jobStatus,
+ (
+ SELECT WM_CONCAT(qbc.BERR_NAME)
+ FROM NGWL_TEST_YMS.QMS_WINDOW_BERR qwb
+ LEFT JOIN NGWL_TEST_YMS.QMS_BERR_CONFIG qbc ON qbc.BERR_ID = qwb.BERR_ID
+ WHERE qwb.WINDOW_ID = a.ID
+ ) AS berrNames
+ FROM NGWL_TEST_YMS.QMS_WINDOW_INFO a
+ LEFT JOIN NGWL_TEST_YMS.SYS_DEPT d ON d.DEPT_ID = a.ORG_NO
+ ORDER BY a.PLATFORM_FLOOR, a.WINDOW_NUMBER
\ No newline at end of file
From f5300fdd5dea7481d63b82a8079a38fff7bffa96 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com>
Date: Thu, 3 Sep 2026 11:39:13 +0800
Subject: [PATCH 65/87] =?UTF-8?q?BI=E6=9F=A5=E8=AF=A2YMS=E6=9C=88=E5=8F=B0?=
=?UTF-8?q?=E7=AE=A1=E7=90=86=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2=E5=BC=80?=
=?UTF-8?q?=E5=8F=91=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../biPlatformRealData/BiPlatformRealDataMapper.xml | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/mhd-bi/src/main/resources/mapper/biPlatformRealData/BiPlatformRealDataMapper.xml b/mhd-bi/src/main/resources/mapper/biPlatformRealData/BiPlatformRealDataMapper.xml
index 0c3f51c5d..d3d0b3c12 100644
--- a/mhd-bi/src/main/resources/mapper/biPlatformRealData/BiPlatformRealDataMapper.xml
+++ b/mhd-bi/src/main/resources/mapper/biPlatformRealData/BiPlatformRealDataMapper.xml
@@ -115,10 +115,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+ 机构名称 deptName <- sys_dept.DEPT_NAME(d.dept_id = a.ORG_NO 关联)
+ 鹤位屏名称 berrNames <- qms_window_berr(WINDOW_ID/BERR_ID) join qms_berr_config(ID/BERR_NAME),WM_CONCAT 拼接
+ 其余列来自 qms_window_info 本身 -->
SELECT
a.ID AS id,
@@ -137,7 +136,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
(
SELECT WM_CONCAT(qbc.BERR_NAME)
FROM NGWL_TEST_YMS.QMS_WINDOW_BERR qwb
- LEFT JOIN NGWL_TEST_YMS.QMS_BERR_CONFIG qbc ON qbc.BERR_ID = qwb.BERR_ID
+ LEFT JOIN NGWL_TEST_YMS.QMS_BERR_CONFIG qbc ON qbc.ID = qwb.BERR_ID
WHERE qwb.WINDOW_ID = a.ID
) AS berrNames
FROM NGWL_TEST_YMS.QMS_WINDOW_INFO a
From 1577eddc7b963de0d58094ed259dfe9ed91f6ed6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com>
Date: Thu, 3 Sep 2026 11:49:38 +0800
Subject: [PATCH 66/87] 30
---
mhd-bi/src/main/resources/bootstrap.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/mhd-bi/src/main/resources/bootstrap.yml b/mhd-bi/src/main/resources/bootstrap.yml
index fa1d95e1a..2572662c1 100644
--- a/mhd-bi/src/main/resources/bootstrap.yml
+++ b/mhd-bi/src/main/resources/bootstrap.yml
@@ -19,14 +19,14 @@ spring:
# username: nacos
# password: manhuoda@2023
#线上正式环境
- server-addr: 10.102.192.31:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
config:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.31:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From 9447604c9644ae5df32fb356b9343d799692a054 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com>
Date: Thu, 3 Sep 2026 12:37:33 +0800
Subject: [PATCH 67/87] 31
---
mhd-bi/src/main/resources/bootstrap.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/mhd-bi/src/main/resources/bootstrap.yml b/mhd-bi/src/main/resources/bootstrap.yml
index 2572662c1..fa1d95e1a 100644
--- a/mhd-bi/src/main/resources/bootstrap.yml
+++ b/mhd-bi/src/main/resources/bootstrap.yml
@@ -19,14 +19,14 @@ spring:
# username: nacos
# password: manhuoda@2023
#线上正式环境
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
config:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From 4ad31a870a3bc2a3587378cd568d38d29a4a9348 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Thu, 3 Sep 2026 15:52:18 +0800
Subject: [PATCH 68/87] =?UTF-8?q?fix(oms):=20=E7=89=A9=E6=96=99=E8=A7=A3?=
=?UTF-8?q?=E6=9E=90=E9=98=B2=E5=BC=A0=E5=86=A0=E6=9D=8E=E6=88=B4+?=
=?UTF-8?q?=E5=AF=BC=E5=85=A5=E4=B8=89=E7=B1=BB=E6=A0=A1=E9=AA=8C=E5=90=88?=
=?UTF-8?q?=E5=B9=B6=E6=8A=A5=E9=94=99=EF=BC=8C=E5=AE=A2=E6=88=B7=E7=BC=96?=
=?UTF-8?q?=E7=A0=81=E5=8F=AA=E8=AE=A4USER=5FMEMBER=5FCODE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
一、出库业务单导入(ReservationStockInOrderImpl)
- 物料不存在/客户不存在/批次库存不足三类校验全部收集完成后统一报错,不再分阶段中断
- materialCache 取用统一 trim,防 Excel 编号带空格导致校验被跳过
二、物料三级解析防张冠李戴(MaterialBaseInfoResolveService)
- baseId 按主键查到的档案与明细编码不一致时不再信任 baseId,转库存ID反查/编码+组织兜底,两级落空才退回按ID档案,命中打WARN日志
- 背景:前端把库存ID传进 materialBaseInfoId,撞上编码=名称的脏档案主键后整行物料被覆盖成错误物料
三、客户编码口径(reservationStockOutOrder/ReservationStockOutOrderMapper.xml)
- queryCustomerByCode 只认 USER.USER_MEMBER_CODE,不再放行 USER_SHIPPER.CUSTOMER_NC_CODE
四、明细查询补字段(reserveStockOutOrder/ReserveStockOutOrderMapper.xml)
- resultMap 补 status/issue_status 映射,detailsList 查询补查 a.status, a.issue_status
---
.../MaterialBaseInfoResolveService.java | 26 ++++++--
.../ReservationStockInOrderImpl.java | 66 ++++++++++---------
.../ReservationStockOutOrderMapper.xml | 8 +--
.../ReserveStockOutOrderMapper.xml | 4 +-
4 files changed, 62 insertions(+), 42 deletions(-)
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/materialBaseInfo/service/MaterialBaseInfoResolveService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/materialBaseInfo/service/MaterialBaseInfoResolveService.java
index 510ca34b6..02b37e095 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/materialBaseInfo/service/MaterialBaseInfoResolveService.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/materialBaseInfo/service/MaterialBaseInfoResolveService.java
@@ -5,6 +5,7 @@ import com.mhd.oms.domain.reservationMaterialInventory.entity.ReservationMateria
import com.mhd.oms.domain.reservationMaterialInventory.repository.mapper.ReservationMaterialInventoryMapper;
import com.mhd.oms.domain.reservationStockInOrder.repository.mapper.ReservationStockInOrderMapper;
import com.mhd.oms.domain.reservationStockInOrder.repository.po.MaterialBaseInfoPO;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -13,6 +14,7 @@ import org.springframework.stereotype.Service;
* 解决客户端推单把 materialInventoryId 传进 materialBaseInfoId 字段、或漏传导致明细存脏ID的问题。
* 三级解析:1.按baseId直查 → 2.按库存ID反查纠正 → 3.按物料编码+组织兜底
*/
+@Slf4j
@Service
public class MaterialBaseInfoResolveService {
@@ -30,11 +32,23 @@ public class MaterialBaseInfoResolveService {
* @return 解析成功返回物料信息(调用方需用 po.getMaterialBaseInfoId() 回填纠正后的ID);全部失败返回 null
*/
public MaterialBaseInfoPO resolve(Long materialBaseInfoId, Long materialInventoryId, String materialCode, Long organizationId) {
- // 1. 优先按 baseId 直查(有效ID不受影响)
+ // 1. 优先按 baseId 直查(有效ID不受影响)。
+ // 防张冠李戴:客户端曾把库存ID传进 materialBaseInfoId,若该库存ID恰好撞上另一条有效档案的主键
+ // (如库存1201撞上编码=名称的脏档案"水箱"),按ID查到的档案编码会与明细编码对不上。
+ // 此时 baseId 不可信,继续走库存反查/编码兜底;两级都落空时才退回按ID查到的档案
+ MaterialBaseInfoPO byId = null;
if (materialBaseInfoId != null && materialBaseInfoId > 0) {
MaterialBaseInfoPO po = reservationStockInOrderMapper.getinfo(materialBaseInfoId);
if (po != null) {
- return po;
+ if (StringUtils.isNotBlank(materialCode) && po.getMaterialCode() != null
+ && !po.getMaterialCode().trim().equals(materialCode.trim())) {
+ log.warn("物料ID疑似误传:baseInfoId={} 按主键查到档案[{}({})],与明细编码[{}]不一致," +
+ "转库存反查/编码兜底(客户端可能把库存ID传进了materialBaseInfoId)",
+ materialBaseInfoId, po.getMaterialCode(), po.getMaterialName(), materialCode);
+ byId = po;
+ } else {
+ return po;
+ }
}
}
// 2. baseId 无效但带了库存ID → 反查库存表拿正确 baseInfoId(修复"库存ID传进baseId"场景)
@@ -50,8 +64,12 @@ public class MaterialBaseInfoResolveService {
}
// 3. 兜底:按物料编码+组织查(修复 baseId=0 漏传场景)
if (StringUtils.isNotBlank(materialCode) && organizationId != null) {
- return reservationStockInOrderMapper.getByCode(materialCode.trim(), organizationId);
+ MaterialBaseInfoPO po = reservationStockInOrderMapper.getByCode(materialCode.trim(), organizationId);
+ if (po != null) {
+ return po;
+ }
}
- return null;
+ // 编码不一致已证明 baseId 不可信,但库存反查/编码兜底都落空时,退回按ID查到的档案,保持原有兜底行为
+ return byId;
}
}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java
index 9d7774ba5..21ed397d6 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java
@@ -297,16 +297,39 @@ public class ReservationStockInOrderImpl extends ServiceImpl problems = new ArrayList<>();
- if (!missingMaterials.isEmpty()) {
- problems.add("物料[" + String.join("、", missingMaterials) + "]不存在,请先维护物料信息");
+ // ====== 第三步:物料/客户/库存三类校验全部完成后统一报错(不再分阶段各自中断) ======
+ List problems = new ArrayList<>();
+ if (!missingMaterials.isEmpty()) {
+ problems.add("物料[" + String.join("、", missingMaterials) + "]不存在,请先维护物料信息");
+ }
+ if (!missingCustomers.isEmpty()) {
+ problems.add("客户[" + String.join("、", missingCustomers) + "]不存在,请先维护客户信息");
+ }
+
+ // 库存预检:只对已存在的物料比较批次库存(不存在的物料问题已收集),不足的同样收集
+ if (!productDetailList.isEmpty()) {
+ Set insufficientMaterials = new HashSet<>();
+ for (ProductDetail productDetail : productDetailList) {
+ // materialCache 的 key 是 trim 过的编码,取用时同样 trim,避免 Excel 编号带空格导致校验被静默跳过
+ String productCode = productDetail.getProductCode() == null ? "" : productDetail.getProductCode().trim();
+ MaterialBaseInfoPO materialBaseInfoPO = materialCache.get(productCode);
+ if (materialBaseInfoPO == null) {
+ continue; // 物料不存在的问题已收集
+ }
+ BigDecimal requireQty = new BigDecimal(productDetail.getPieceCount()).setScale(2, BigDecimal.ROUND_HALF_UP);
+ List inventoryList = stockInOrderMapper.getkcId(
+ materialBaseInfoPO.getMaterialBaseInfoId(), requireQty, warehouseId);
+ if (inventoryList == null || inventoryList.isEmpty()) {
+ insufficientMaterials.add(productCode);
+ }
}
- if (!missingCustomers.isEmpty()) {
- problems.add("客户[" + String.join("、", missingCustomers) + "]不存在,请先维护客户信息");
+ if (!insufficientMaterials.isEmpty()) {
+ problems.add("物料[" + String.join("、", insufficientMaterials) + "]"
+ + (warehouseId != null && warehouseId > 0 ? "在当前仓库" : "") + "批次库存数量少于出库数量");
}
- throw new Exception(String.join(";", problems) + ",维护完成后重新导入");
+ }
+ if (!problems.isEmpty()) {
+ throw new Exception(String.join(";", problems) + ",请处理后重新导入");
}
// ====== 后续处理(编号均已存在):货主归属校验、建单落库 ======
@@ -332,28 +355,6 @@ public class ReservationStockInOrderImpl extends ServiceImpl insufficientMaterials = new HashSet<>();
- for (ProductDetail productDetail : productDetailList) {
- MaterialBaseInfoPO materialBaseInfoPO = materialCache.get(productDetail.getProductCode());
- if (materialBaseInfoPO == null) {
- continue; // 存在性已在前面统一校验
- }
- BigDecimal requireQty = new BigDecimal(productDetail.getPieceCount()).setScale(2, BigDecimal.ROUND_HALF_UP);
- List inventoryList = stockInOrderMapper.getkcId(
- materialBaseInfoPO.getMaterialBaseInfoId(), requireQty, warehouseId);
- if (inventoryList == null || inventoryList.isEmpty()) {
- insufficientMaterials.add(productDetail.getProductCode());
- }
- }
- if (!insufficientMaterials.isEmpty()) {
- throw new Exception("物料[" + String.join("、", insufficientMaterials) + "]"
- + (warehouseId != null && warehouseId > 0 ? "在当前仓库" : "") + "批次库存数量少于出库数量!");
- }
- }
-
ReservationStockOutOrderDO reservationStockOutOrderDO = new ReservationStockOutOrderDO();
// 生成出库业务单号
String orderNumber = reservationStockOutOrderApplicationService.generateReserveOrderNumber();
@@ -407,8 +408,9 @@ public class ReservationStockInOrderImpl extends ServiceImpl
+ 客户编码只认 USER.USER_MEMBER_CODE(客户编码);
+ 2026-09-03 起不再放行 USER_SHIPPER.CUSTOMER_NC_CODE(NC客户代码),避免会员/NC编码撞车导致不存在的客户编号误通过 -->
select max(u.user_id) as user_id, max(u.user_name) as user_name, max(u.user_member_code) as user_member_code
from NGWL_TEST_USER."USER" u
- left join NGWL_TEST_USER.USER_SHIPPER us
- on us.USER_ID = u.USER_ID and us.DEL_FLAG = 1
where u.ORGANIZATION_ID = #{organizationId} and u.DEL_FLAG = 1
- and (u.USER_MEMBER_CODE = #{userMemberCode} or us.CUSTOMER_NC_CODE = #{userMemberCode})
+ and u.USER_MEMBER_CODE = #{userMemberCode}
diff --git a/mhd_oms/src/main/resources/mapper/reserveStockOutOrder/ReserveStockOutOrderMapper.xml b/mhd_oms/src/main/resources/mapper/reserveStockOutOrder/ReserveStockOutOrderMapper.xml
index 7ce415d78..d057676f2 100644
--- a/mhd_oms/src/main/resources/mapper/reserveStockOutOrder/ReserveStockOutOrderMapper.xml
+++ b/mhd_oms/src/main/resources/mapper/reserveStockOutOrder/ReserveStockOutOrderMapper.xml
@@ -361,6 +361,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+
+
@@ -452,7 +454,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
select
- b.*
+ b.*, a.status, a.issue_status
from reserve_stock_out_order a left join reserve_out_material_detail b on a.OUT_ORDER_NUMBER = b.OUT_ORDER_NUMBER
From c9c3062789923ca95a48003c723e30e6888ebd57 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Thu, 3 Sep 2026 15:57:44 +0800
Subject: [PATCH 69/87] =?UTF-8?q?feat(wms,oms)=EF=BC=9A=E5=85=A5=E5=BA=93?=
=?UTF-8?q?=E6=8E=92=E5=90=8D=E7=BB=9F=E8=AE=A1=E6=94=B9=E4=B8=BA=E6=8C=89?=
=?UTF-8?q?=E7=89=A9=E6=96=99=E7=BC=96=E7=A0=81=E5=90=88=E5=B9=B6(?=
=?UTF-8?q?=E4=B8=80=E8=A1=8C=3D=E4=B8=80=E4=B8=AA=E7=89=A9=E6=96=99?=
=?UTF-8?q?=E5=9C=A8=E5=8C=BA=E9=97=B4=E5=86=85=E5=85=A8=E9=83=A8=E5=B7=B2?=
=?UTF-8?q?=E5=85=A5=E5=BA=93=E4=BB=93=E5=8D=95=E7=9A=84=E5=90=88=E8=AE=A1?=
=?UTF-8?q?)=EF=BC=9A=E8=BF=94=E5=9B=9E=E5=88=97=E8=A3=81=E5=89=AA?=
=?UTF-8?q?=E4=B8=BA=E7=89=A9=E6=96=99=E7=BC=96=E7=A0=81/=E8=B4=A7?=
=?UTF-8?q?=E5=90=8D/=E8=A7=84=E6=A0=BC=E5=9E=8B=E5=8F=B7/=E5=8D=95?=
=?UTF-8?q?=E4=BD=8D/=E4=BB=B6=E6=95=B0(=E5=AE=9E=E9=99=85=E4=B8=8A?=
=?UTF-8?q?=E6=9E=B6=E9=87=8F)/=E6=AF=9B=E9=87=8D(=E5=90=A8)/=E6=8A=95?=
=?UTF-8?q?=E4=BF=9D=E6=80=BB=E9=A2=9D(=E8=B4=A7=E5=93=81=E6=A1=A3?=
=?UTF-8?q?=E6=A1=88=E4=BF=9D=E9=A2=9D=E5=8F=96MAX=E4=B8=8D=E8=B7=A8?=
=?UTF-8?q?=E4=BB=93=E5=8D=95=E7=B4=AF=E5=8A=A0)/=E4=BD=93=E7=A7=AF?=
=?UTF-8?q?=EF=BC=9B=E4=BB=93=E5=8D=95=E7=BC=96=E5=8F=B7/=E5=AE=A2?=
=?UTF-8?q?=E6=88=B7=E7=BC=96=E5=8F=B7/=E5=AD=98=E8=B4=A7=E4=BA=BA/?=
=?UTF-8?q?=E5=85=A5=E4=BB=93=E6=97=A5=E6=9C=9F=E4=B8=BA=E5=8D=95=E6=8D=AE?=
=?UTF-8?q?=E7=BA=A7=E5=AD=97=E6=AE=B5=E5=8D=95=E5=80=BC=E5=A4=B1=E7=9C=9F?=
=?UTF-8?q?=EF=BC=8C=E7=A7=BB=E5=87=BA=E8=BF=94=E5=9B=9E=E5=88=97=E4=BB=85?=
=?UTF-8?q?=E4=BF=9D=E7=95=99=E4=B8=BA=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6?=
=?UTF-8?q?=EF=BC=9BHAVING=E8=BF=87=E6=BB=A40=E4=BB=B6=E8=A1=8C=EF=BC=9B?=
=?UTF-8?q?=E5=90=88=E8=AE=A1=E8=A1=8C=E6=8A=95=E4=BF=9D=E6=80=BB=E9=A2=9D?=
=?UTF-8?q?=3D=E5=90=84=E7=89=A9=E6=96=99=E4=BF=9D=E9=A2=9D=E4=B9=8B?=
=?UTF-8?q?=E5=92=8C(=E6=AF=8F=E7=89=A9=E6=96=99=E8=AE=A1=E4=B8=80?=
=?UTF-8?q?=E6=AC=A1)=EF=BC=8CtotalOrderCount=3D=E6=B6=89=E5=8F=8A?=
=?UTF-8?q?=E4=BB=93=E5=8D=95=E6=95=B0=EF=BC=9BOMS/WMS=E4=B8=A4=E7=AB=AF?=
=?UTF-8?q?=E5=8F=A3=E5=BE=84=E6=95=B0=E5=AD=97=E4=B8=80=E8=87=B4=EF=BC=9B?=
=?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=8F=82=E6=95=B0=E4=B8=8E=E8=BF=94=E5=9B=9E?=
=?UTF-8?q?=E7=BB=93=E6=9E=84=E5=A4=96=E5=B1=82=E4=B8=8D=E5=8F=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../mapper/ExecutionInboundRankMapper.java | 2 +-
.../po/ExecutionInboundMaterialRankPO.java | 41 +++++--------------
.../po/ExecutionInboundRankTotalPO.java | 4 +-
.../inboundRank/ExecutionInboundRankApi.java | 4 +-
.../ExecutionInboundRankMapper.xml | 28 +++++++------
.../repository/mapper/InboundRankMapper.java | 2 +-
.../repository/po/InboundMaterialRankPO.java | 41 +++++--------------
.../repository/po/InboundRankTotalPO.java | 4 +-
.../dto/inboundRank/InboundRankDTO.java | 3 +-
.../facadeApi/inboundRank/InboundRankApi.java | 6 ++-
.../mapper/inboundRank/InboundRankMapper.xml | 27 ++++++------
11 files changed, 65 insertions(+), 97 deletions(-)
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/inboundRank/repository/mapper/ExecutionInboundRankMapper.java b/mhd_oms/src/main/java/com/mhd/oms/domain/inboundRank/repository/mapper/ExecutionInboundRankMapper.java
index 64654e548..699f91e69 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/inboundRank/repository/mapper/ExecutionInboundRankMapper.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/inboundRank/repository/mapper/ExecutionInboundRankMapper.java
@@ -15,7 +15,7 @@ import java.util.List;
public interface ExecutionInboundRankMapper {
/**
- * 商品入库排名列表(仓单+货品汇总,按件数降序)
+ * 商品入库排名列表(按物料编码合并,按件数降序,过滤0件行)
*/
List queryMaterialRankList(ExecutionInboundRankDO executionInboundRankDO);
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/inboundRank/repository/po/ExecutionInboundMaterialRankPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/inboundRank/repository/po/ExecutionInboundMaterialRankPO.java
index 6532af87f..1aa7db54f 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/inboundRank/repository/po/ExecutionInboundMaterialRankPO.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/inboundRank/repository/po/ExecutionInboundMaterialRankPO.java
@@ -1,24 +1,21 @@
package com.mhd.oms.domain.inboundRank.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(一行 = 某仓单内某货品的合计,按件数降序排名)
+ * 入库排名统计PO(一行 = 一个物料的合计(按物料编码合并,查询区间内全部已入库仓单),按件数降序排名)
*
* 数据源跨库取 WMS 入库表(NGWL_TEST_WMS.stock_in_order / in_material_detail,OMS 执行单状态/上架量不回传),
* 口径与 WMS 端 /inboundRankApi 完全一致,两边数字一致。
- * 字段口径:入仓日期=WMS入仓单入仓日期(为空兜底建档时间);仓单编号=WMS入库单号;客户编号/存货人=入仓单货主;
- * 件数/毛重/体积=仓单内该货品明细合计(件数取实际上架量 SHELVES_QUANTITY);毛重(吨)=明细总毛重KG/1000;
- * 投保总额=货品档案保额(NGWL_TEST_WMS.material_base_info.insure_amount,组内取MAX防多批次明细行重复累加)
+ * 字段口径:件数=实际上架量(SHELVES_QUANTITY)合计;毛重(吨)=明细总毛重KG/1000;体积=明细合计;
+ * 投保总额=货品档案保额(NGWL_TEST_WMS.material_base_info.insure_amount,物料维度单一值取MAX,不跨仓单累加);
+ * 仓单编号/客户编号/存货人/入仓日期为单据级字段,按物料合并后单值失真,仅作查询条件不返回
*
* @author rcx
* @date 2026-08-31
@@ -29,26 +26,8 @@ public class ExecutionInboundMaterialRankPO implements Serializable {
private static final long serialVersionUID = 1L;
- @ApiModelProperty("入仓日期")
- @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
- @DateTimeFormat(pattern = "yyyy-MM-dd")
- @Excel(name = "入仓日期", width = 30, dateFormat = "yyyy-MM-dd")
- private Date warehouseDate;
-
- @ApiModelProperty("仓单编号(WMS入库单号)")
- @Excel(name = "仓单编号")
- private String inOrderNumber;
-
- @ApiModelProperty("客户编号")
- @Excel(name = "客户编号")
- private String shipperCode;
-
- @ApiModelProperty("存货人(客户名称)")
- @Excel(name = "存货人")
- private String shipperName;
-
- @ApiModelProperty("商品货号")
- @Excel(name = "商品货号")
+ @ApiModelProperty("物料编码(合并依据)")
+ @Excel(name = "物料编码")
private String materialCode;
@ApiModelProperty("货名/商品名称")
@@ -63,19 +42,19 @@ public class ExecutionInboundMaterialRankPO implements Serializable {
@Excel(name = "单位")
private String unitName;
- @ApiModelProperty("件数(仓单内该货品实际上架量合计 SHELVES_QUANTITY,排名依据)")
+ @ApiModelProperty("件数(该物料实际上架量合计 SHELVES_QUANTITY,排名依据)")
@Excel(name = "件数")
private BigDecimal pieceCount;
- @ApiModelProperty("毛重(吨)(仓单内该货品合计,KG/1000)")
+ @ApiModelProperty("毛重(吨)(该物料合计,KG/1000)")
@Excel(name = "毛重(吨)")
private BigDecimal grossWeightTon;
- @ApiModelProperty("投保总额(货品档案保额)")
+ @ApiModelProperty("投保总额(货品档案保额,物料维度单一值)")
@Excel(name = "投保总额")
private BigDecimal insureAmount;
- @ApiModelProperty("体积(CBM)(仓单内该货品合计)")
+ @ApiModelProperty("体积(CBM)(该物料合计)")
@Excel(name = "体积(CBM)")
private BigDecimal totalVolume;
}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/inboundRank/repository/po/ExecutionInboundRankTotalPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/inboundRank/repository/po/ExecutionInboundRankTotalPO.java
index c8a51892e..6bd14a5f4 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/inboundRank/repository/po/ExecutionInboundRankTotalPO.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/inboundRank/repository/po/ExecutionInboundRankTotalPO.java
@@ -28,12 +28,12 @@ public class ExecutionInboundRankTotalPO implements Serializable {
@ApiModelProperty("毛重(吨)合计")
private BigDecimal totalGrossWeightTon;
- @ApiModelProperty("投保总额合计(各仓单+货品行保额之和)")
+ @ApiModelProperty("投保总额合计(各物料保额之和,每物料计一次)")
private BigDecimal totalInsureAmount;
@ApiModelProperty("体积(CBM)合计")
private BigDecimal totalVolume;
- @ApiModelProperty("仓单数合计")
+ @ApiModelProperty("涉及仓单数(当前筛选条件下去重统计)")
private Long totalOrderCount;
}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/inboundRank/ExecutionInboundRankApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/inboundRank/ExecutionInboundRankApi.java
index f97d23e57..5fa9b0fe0 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/inboundRank/ExecutionInboundRankApi.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/inboundRank/ExecutionInboundRankApi.java
@@ -30,7 +30,9 @@ import java.util.List;
* 故数据源跨库取 WMS 入库表(NGWL_TEST_WMS.stock_in_order/in_material_detail,与 OMS 出库排名跨库修法一致);
* 口径与 WMS 端 /inboundRankApi 完全一致,两边数字一致:仅已入库(5) + 明细 level=1 主行 +
* 入仓日期(为空的历史单按建档时间兜底) + 件数=实际上架量(SHELVES_QUANTITY);
- * 一行 = 某仓单内某货品的合计,按件数降序排名。
+ * 一行 = 一个物料的合计(按物料编码合并区间内全部已入库仓单),按件数降序排名,件数为0的物料不返回。
+ * 返回字段:物料编码/货名/规格型号/单位/件数/毛重(吨)/投保总额/体积(CBM);
+ * 仓单编号/客户编号/存货人/入仓日期为单据级字段仅作查询条件,不返回。
* 字段:入仓日期/仓单编号/客户编号/存货人/货名/件数/毛重(吨)/投保总额/体积(CBM)。
* 与出库排名(/executionOutboundRankApi)配对,前端用 tab 页区分
*
diff --git a/mhd_oms/src/main/resources/mapper/inboundRank/ExecutionInboundRankMapper.xml b/mhd_oms/src/main/resources/mapper/inboundRank/ExecutionInboundRankMapper.xml
index e6b76eb0d..f73e13eea 100644
--- a/mhd_oms/src/main/resources/mapper/inboundRank/ExecutionInboundRankMapper.xml
+++ b/mhd_oms/src/main/resources/mapper/inboundRank/ExecutionInboundRankMapper.xml
@@ -15,8 +15,8 @@
口径与 WMS 端 /inboundRankApi 完全一致,两边数字一致;
条件:b.status = 5已入库(排除已取消(6)/已关闭(7)及未完成单据);
日期筛选按入仓单入仓日期 b.warehouse_date(与列表"入仓日期"列同源,为空的历史单按建档时间兜底);
- 一行 = 某仓单(b.in_order_number)内某货品(a.material_code)的合计,
- 按件数(实际上架量 SUM(a.SHELVES_QUANTITY))降序排名
+ 一行 = 一个物料的合计(按物料编码合并,区间内全部已入库仓单),按件数(实际上架量 SUM(a.SHELVES_QUANTITY))降序排名,
+ 件数为0的物料不返回(HAVING过滤);仓单编号/客户编号/存货人/入仓日期为单据级字段仅作查询条件不返回
-->
a.del_flag = 1
@@ -57,14 +57,10 @@
left join NGWL_TEST_WMS.material_base_info c on a.material_base_info_id = c.material_base_info_id
-
+
select
- IFNULL(MAX(b.warehouse_date), MAX(b.create_time)) AS warehouseDate,
- b.in_order_number AS inOrderNumber,
- MAX(b.shipper_code) AS shipperCode,
- MAX(b.shipper_name) AS shipperName,
a.material_code AS materialCode,
MAX(a.material_name) AS materialName,
MAX(a.SPECIFICATION_MODEL) AS specificationModel,
@@ -77,11 +73,13 @@
- GROUP BY b.in_order_number, a.material_code
- order by pieceCount desc, warehouseDate desc, inOrderNumber desc
+ GROUP BY a.material_code
+ HAVING pieceCount > 0
+ order by pieceCount desc, materialCode
-
+
select
@@ -89,10 +87,14 @@
ROUND(IFNULL(SUM(t.grossWeightKG), 0) / 1000, 3) AS totalGrossWeightTon,
IFNULL(SUM(t.insureAmount), 0) AS totalInsureAmount,
IFNULL(SUM(t.totalVolume), 0) AS totalVolume,
- COUNT(DISTINCT t.inOrderNumber) AS totalOrderCount
+ (select COUNT(DISTINCT b.in_order_number)
+
+
+
+ ) AS totalOrderCount
from (
select
- b.in_order_number AS inOrderNumber,
+ a.material_code AS materialCode,
IFNULL(SUM(a.SHELVES_QUANTITY), 0) AS pieceCount,
IFNULL(SUM(a.TOTAL_GROSS_WEIGHT), 0) AS grossWeightKG,
MAX(IFNULL(c.insure_amount, 0)) AS insureAmount,
@@ -101,7 +103,7 @@
- GROUP BY b.in_order_number, a.material_code
+ GROUP BY a.material_code
) t
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/mapper/InboundRankMapper.java b/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/mapper/InboundRankMapper.java
index 5c95d09fa..bb30997d2 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/mapper/InboundRankMapper.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/mapper/InboundRankMapper.java
@@ -15,7 +15,7 @@ import java.util.List;
public interface InboundRankMapper {
/**
- * 商品入库排名列表(仓单+货品汇总,按件数降序)
+ * 商品入库排名列表(按物料编码合并,按件数降序,过滤0件行)
*/
List queryMaterialRankList(InboundRankDO inboundRankDO);
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/po/InboundMaterialRankPO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/po/InboundMaterialRankPO.java
index 3044767a9..0805c433c 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/po/InboundMaterialRankPO.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/po/InboundMaterialRankPO.java
@@ -1,22 +1,19 @@
package com.mhd.wms.domain.inboundRank.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(一行 = 某仓单内某货品的合计,按件数降序排名)
+ * 入库排名统计PO(一行 = 一个物料的合计(按物料编码合并,查询区间内全部已入库仓单),按件数降序排名)
*
- * 字段口径:入仓日期=入仓单入仓日期(为空兜底建档时间);仓单编号=入库单号;客户编号/存货人=入仓单货主;
- * 件数/毛重/体积=仓单内该货品明细合计(件数取实际上架量 SHELVES_QUANTITY);毛重(吨)=明细总毛重KG/1000;
- * 投保总额=货品档案保额(material_base_info.insure_amount,组内取MAX防多批次明细行重复累加)
+ * 字段口径:件数=实际上架量(SHELVES_QUANTITY)合计;毛重(吨)=明细总毛重KG/1000;体积=明细合计;
+ * 投保总额=货品档案保额(material_base_info.insure_amount,物料维度单一值取MAX,不跨仓单累加);
+ * 仓单编号/客户编号/存货人/入仓日期为单据级字段,按物料合并后单值失真,仅作查询条件不返回
*
* @author rcx
* @date 2026-08-31
@@ -27,26 +24,8 @@ public class InboundMaterialRankPO implements Serializable {
private static final long serialVersionUID = 1L;
- @ApiModelProperty("入仓日期")
- @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
- @DateTimeFormat(pattern = "yyyy-MM-dd")
- @Excel(name = "入仓日期", width = 30, dateFormat = "yyyy-MM-dd")
- private Date warehouseDate;
-
- @ApiModelProperty("仓单编号(入库单号)")
- @Excel(name = "仓单编号")
- private String inOrderNumber;
-
- @ApiModelProperty("客户编号")
- @Excel(name = "客户编号")
- private String shipperCode;
-
- @ApiModelProperty("存货人(客户名称)")
- @Excel(name = "存货人")
- private String shipperName;
-
- @ApiModelProperty("商品货号")
- @Excel(name = "商品货号")
+ @ApiModelProperty("物料编码(合并依据)")
+ @Excel(name = "物料编码")
private String materialCode;
@ApiModelProperty("货名/商品名称")
@@ -61,19 +40,19 @@ public class InboundMaterialRankPO implements Serializable {
@Excel(name = "单位")
private String unitName;
- @ApiModelProperty("件数(仓单内该货品实际上架量合计 SHELVES_QUANTITY,排名依据)")
+ @ApiModelProperty("件数(该物料实际上架量合计 SHELVES_QUANTITY,排名依据)")
@Excel(name = "件数")
private BigDecimal pieceCount;
- @ApiModelProperty("毛重(吨)(仓单内该货品合计,KG/1000)")
+ @ApiModelProperty("毛重(吨)(该物料合计,KG/1000)")
@Excel(name = "毛重(吨)")
private BigDecimal grossWeightTon;
- @ApiModelProperty("投保总额(货品档案保额)")
+ @ApiModelProperty("投保总额(货品档案保额,物料维度单一值)")
@Excel(name = "投保总额")
private BigDecimal insureAmount;
- @ApiModelProperty("体积(CBM)(仓单内该货品合计)")
+ @ApiModelProperty("体积(CBM)(该物料合计)")
@Excel(name = "体积(CBM)")
private BigDecimal totalVolume;
}
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/po/InboundRankTotalPO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/po/InboundRankTotalPO.java
index f7433e5af..59ac8006b 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/po/InboundRankTotalPO.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/inboundRank/repository/po/InboundRankTotalPO.java
@@ -28,12 +28,12 @@ public class InboundRankTotalPO implements Serializable {
@ApiModelProperty("毛重(吨)合计")
private BigDecimal totalGrossWeightTon;
- @ApiModelProperty("投保总额合计(各仓单+货品行保额之和)")
+ @ApiModelProperty("投保总额合计(各物料保额之和,每物料计一次)")
private BigDecimal totalInsureAmount;
@ApiModelProperty("体积(CBM)合计")
private BigDecimal totalVolume;
- @ApiModelProperty("仓单数合计")
+ @ApiModelProperty("涉及仓单数(当前筛选条件下去重统计)")
private Long totalOrderCount;
}
diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/inboundRank/InboundRankDTO.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/inboundRank/InboundRankDTO.java
index e7c812636..a73386995 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/inboundRank/InboundRankDTO.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/inboundRank/InboundRankDTO.java
@@ -9,7 +9,8 @@ import java.io.Serializable;
* 入库排名统计入参DTO
*
* 按入仓日期区间筛选商品入库量统计排名,统计口径:入仓日期 + 仅已入库状态(5) + 明细仅取 level=1 主行;
- * 一行 = 某仓单内某货品的合计,按件数降序排名
+ * 一行 = 一个物料的合计(按物料编码合并),按件数降序排名;
+ * 仓单编号/客户编号/存货人/入仓日期为单据级字段仅作查询条件,返回列不含这些字段
*
* @author rcx
* @date 2026-08-31
diff --git a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/inboundRank/InboundRankApi.java b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/inboundRank/InboundRankApi.java
index bde6855dd..a60b9308a 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/inboundRank/InboundRankApi.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/interfaces/facadeApi/inboundRank/InboundRankApi.java
@@ -26,8 +26,10 @@ import java.util.List;
* 入库排名统计Api
*
* 按入仓日期区间筛选商品入库量统计排名。统计口径:入仓日期(为空的历史单按建档时间兜底) + 仅已入库状态(5),
- * 明细仅取 level=1 主行;一行 = 某仓单内某货品的合计,按件数(实际上架量 SHELVES_QUANTITY)降序排名。
- * 字段:入仓日期/仓单编号/客户编号/存货人/货名/件数/毛重(吨)/投保总额/体积(CBM)。
+ * 明细仅取 level=1 主行;一行 = 一个物料的合计(按物料编码合并区间内全部已入库仓单),
+ * 按件数(实际上架量 SHELVES_QUANTITY)降序排名,件数为0的物料不返回。
+ * 返回字段:物料编码/货名/规格型号/单位/件数/毛重(吨)/投保总额/体积(CBM);
+ * 仓单编号/客户编号/存货人/入仓日期为单据级字段仅作查询条件,不返回。
* 与出库排名(/outboundRankApi)配对,前端用 tab 页区分
*
* @author rcx
diff --git a/mhd_wms/src/main/resources/mapper/inboundRank/InboundRankMapper.xml b/mhd_wms/src/main/resources/mapper/inboundRank/InboundRankMapper.xml
index 63f9a07e0..f4c34136c 100644
--- a/mhd_wms/src/main/resources/mapper/inboundRank/InboundRankMapper.xml
+++ b/mhd_wms/src/main/resources/mapper/inboundRank/InboundRankMapper.xml
@@ -10,7 +10,8 @@
left join 货品档案 material_base_info(c,取保额作投保总额)
口径:b.status = 5已入库(排除已取消(6)/已关闭(7)及未完成单据);
日期筛选按入仓单入仓日期 b.warehouse_date(与列表"入仓日期"列同源,为空的历史单按建档时间兜底);
- 一行 = 某仓单(b.in_order_number)内某货品(a.material_code)的合计,按件数(实际上架量 SUM(a.SHELVES_QUANTITY))降序排名
+ 一行 = 一个物料的合计(按物料编码合并,区间内全部已入库仓单),按件数(实际上架量 SUM(a.SHELVES_QUANTITY))降序排名,
+ 件数为0的物料不返回(HAVING过滤);仓单编号/客户编号/存货人/入仓日期为单据级字段仅作查询条件不返回
-->
a.del_flag = 1
@@ -54,14 +55,10 @@
left join material_base_info c on a.material_base_info_id = c.material_base_info_id
-
+
select
- IFNULL(MAX(b.warehouse_date), MAX(b.create_time)) AS warehouseDate,
- b.in_order_number AS inOrderNumber,
- MAX(b.shipper_code) AS shipperCode,
- MAX(b.shipper_name) AS shipperName,
a.material_code AS materialCode,
MAX(a.material_name) AS materialName,
MAX(a.SPECIFICATION_MODEL) AS specificationModel,
@@ -74,11 +71,13 @@
- GROUP BY b.in_order_number, a.material_code
- order by pieceCount desc, warehouseDate desc, inOrderNumber desc
+ GROUP BY a.material_code
+ HAVING pieceCount > 0
+ order by pieceCount desc, materialCode
-
+
select
@@ -86,10 +85,14 @@
ROUND(IFNULL(SUM(t.grossWeightKG), 0) / 1000, 3) AS totalGrossWeightTon,
IFNULL(SUM(t.insureAmount), 0) AS totalInsureAmount,
IFNULL(SUM(t.totalVolume), 0) AS totalVolume,
- COUNT(DISTINCT t.inOrderNumber) AS totalOrderCount
+ (select COUNT(DISTINCT b.in_order_number)
+
+
+
+ ) AS totalOrderCount
from (
select
- b.in_order_number AS inOrderNumber,
+ a.material_code AS materialCode,
IFNULL(SUM(a.SHELVES_QUANTITY), 0) AS pieceCount,
IFNULL(SUM(a.TOTAL_GROSS_WEIGHT), 0) AS grossWeightKG,
MAX(IFNULL(c.insure_amount, 0)) AS insureAmount,
@@ -98,7 +101,7 @@
- GROUP BY b.in_order_number, a.material_code
+ GROUP BY a.material_code
) t
From 7a3021f82a63d492857e481f3afc0297d27358a1 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Thu, 3 Sep 2026 16:01:17 +0800
Subject: [PATCH 70/87] =?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?=E8=81=9A=E5=90=88=E6=8E=92=E5=90=8D=E2=80=94=E2=80=94=E5=95=86?=
=?UTF-8?q?=E5=93=81=E6=8C=89=E7=89=A9=E6=96=99=E5=90=88=E5=B9=B6/?=
=?UTF-8?q?=E7=BA=BF=E8=B7=AF=E6=8C=89=E7=BA=BF=E8=B7=AF+=E7=89=A9?=
=?UTF-8?q?=E6=96=99=E5=90=88=E5=B9=B6=EF=BC=8C=E6=8C=89=E5=87=BA=E5=BA=93?=
=?UTF-8?q?=E6=95=B0=E9=87=8F=E9=99=8D=E5=BA=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 商品tab:一行=一个货品(跨出库单汇总),返回 货号/货名/件数/毛重(吨)/体积(CBM)/退保总额(占位null),忽略线路筛选参数
- 线路tab:一行=线路×货品(按线路+物料编码合并),额外返回 线路编码/线路,仅统计带线路的单(排除line_code为空的历史单);商品/线路筛选参数均生效
- 单据级字段(种类/仓单编号/入库单号/客户编号/收货人/出仓日期)合并后无单值可对应,不再返回
- 件数=SUM(CHECK_QUANTITY)复核确认的实际出库量(与入库排名实际上架量SHELVES_QUANTITY对称),按件数降序,编码次之
- 合计行:件数/毛重吨/体积 全量合计;商品tab含totalOrderCount(去重出库单数),线路tab含totalOrderCount+totalLineCount(去重线路数)
- 数据源不变:WMS查本库出库表,OMS跨库查NGWL_TEST_WMS同名表,两边数字一致;接口路径/传参不变
---
.../facade/IExecutionOutboundRankService.java | 23 +++--
.../mapper/ExecutionOutboundRankMapper.java | 23 +++--
.../ExecutionOutboundRankImpl.java | 23 +++--
.../po/ExecutionOutboundDetailRankPO.java | 85 -----------------
.../ExecutionOutboundDetailRankTotalPO.java | 9 +-
.../po/ExecutionOutboundLineRankPO.java | 59 ++++++++++++
.../po/ExecutionOutboundMaterialRankPO.java | 50 ++++++++++
...ecutionOutboundRankApplicationService.java | 46 +++++++---
.../ExecutionOutboundRankDomainService.java | 31 +++++--
.../ExecutionOutboundRankApi.java | 55 +++++------
.../ExecutionOutboundRankMapper.xml | 92 ++++++++++++-------
.../OutboundRankApplicationService.java | 46 +++++++---
.../facade/IOutboundRankService.java | 23 +++--
.../repository/mapper/OutboundRankMapper.java | 23 +++--
.../persistence/OutboundRankImpl.java | 23 +++--
.../repository/po/OutboundDetailRankPO.java | 85 -----------------
.../po/OutboundDetailRankTotalPO.java | 3 +
.../repository/po/OutboundLineRankPO.java | 59 ++++++++++++
.../repository/po/OutboundMaterialRankPO.java | 50 ++++++++++
.../service/OutboundRankDomainService.java | 31 +++++--
.../outboundRank/OutboundRankApi.java | 53 ++++++-----
.../outboundRank/OutboundRankMapper.xml | 91 +++++++++++-------
22 files changed, 615 insertions(+), 368 deletions(-)
delete 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/ExecutionOutboundLineRankPO.java
create mode 100644 mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/po/ExecutionOutboundMaterialRankPO.java
delete 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/OutboundLineRankPO.java
create mode 100644 mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundMaterialRankPO.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 477fc1e99..239e6f118 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,13 +1,14 @@
package com.mhd.oms.domain.outboundRank.repository.facade;
-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.po.ExecutionOutboundLineRankPO;
+import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundMaterialRankPO;
import com.mhd.oms.domain.outboundRank.repository.todo.ExecutionOutboundRankDO;
import java.util.List;
/**
- * 出库排名统计(明细)Service接口
+ * 出库排名统计Service接口
*
* @author rcx
* @date 2026-08-31
@@ -15,12 +16,22 @@ import java.util.List;
public interface IExecutionOutboundRankService {
/**
- * 出库明细列表
+ * 商品出库排名列表(货品聚合)
*/
- List queryDetailList(ExecutionOutboundRankDO executionOutboundRankDO);
+ List queryMaterialRankList(ExecutionOutboundRankDO executionOutboundRankDO);
/**
- * 出库明细合计(不分页)
+ * 商品出库排名合计(不分页)
*/
- ExecutionOutboundDetailRankTotalPO queryDetailTotal(ExecutionOutboundRankDO executionOutboundRankDO);
+ ExecutionOutboundDetailRankTotalPO queryMaterialRankTotal(ExecutionOutboundRankDO executionOutboundRankDO);
+
+ /**
+ * 线路出库排名列表(线路×货品聚合)
+ */
+ List queryLineRankList(ExecutionOutboundRankDO executionOutboundRankDO);
+
+ /**
+ * 线路出库排名合计(不分页)
+ */
+ ExecutionOutboundDetailRankTotalPO queryLineRankTotal(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 3f88c7823..411aaa893 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,13 +1,14 @@
package com.mhd.oms.domain.outboundRank.repository.mapper;
-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.po.ExecutionOutboundLineRankPO;
+import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundMaterialRankPO;
import com.mhd.oms.domain.outboundRank.repository.todo.ExecutionOutboundRankDO;
import java.util.List;
/**
- * 出库排名统计(明细)Mapper接口
+ * 出库排名统计Mapper接口
*
* @author rcx
* @date 2026-08-31
@@ -15,12 +16,22 @@ import java.util.List;
public interface ExecutionOutboundRankMapper {
/**
- * 出库明细列表(一行=仓单×货品,按件数倒序)
+ * 商品出库排名列表(一行=一个货品,跨单汇总,按实际出库量降序)
*/
- List queryDetailList(ExecutionOutboundRankDO executionOutboundRankDO);
+ List queryMaterialRankList(ExecutionOutboundRankDO executionOutboundRankDO);
/**
- * 出库明细合计(不分页,当前筛选条件全量合计)
+ * 商品出库排名合计(不分页,当前筛选条件全量合计)
*/
- ExecutionOutboundDetailRankTotalPO queryDetailTotal(ExecutionOutboundRankDO executionOutboundRankDO);
+ ExecutionOutboundDetailRankTotalPO queryMaterialRankTotal(ExecutionOutboundRankDO executionOutboundRankDO);
+
+ /**
+ * 线路出库排名列表(一行=线路×货品,按实际出库量降序,仅统计带线路的单)
+ */
+ List queryLineRankList(ExecutionOutboundRankDO executionOutboundRankDO);
+
+ /**
+ * 线路出库排名合计(不分页,当前筛选条件全量合计)
+ */
+ ExecutionOutboundDetailRankTotalPO queryLineRankTotal(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 76e2abcd4..e4c23f36b 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,8 +2,9 @@ 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.ExecutionOutboundDetailRankPO;
import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundDetailRankTotalPO;
+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.todo.ExecutionOutboundRankDO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -11,7 +12,7 @@ import org.springframework.stereotype.Service;
import java.util.List;
/**
- * 出库排名统计(明细)Service业务层处理
+ * 出库排名统计Service业务层处理
*
* @author rcx
* @date 2026-08-31
@@ -23,12 +24,22 @@ public class ExecutionOutboundRankImpl implements IExecutionOutboundRankService
private ExecutionOutboundRankMapper executionOutboundRankMapper;
@Override
- public List queryDetailList(ExecutionOutboundRankDO executionOutboundRankDO) {
- return executionOutboundRankMapper.queryDetailList(executionOutboundRankDO);
+ public List queryMaterialRankList(ExecutionOutboundRankDO executionOutboundRankDO) {
+ return executionOutboundRankMapper.queryMaterialRankList(executionOutboundRankDO);
}
@Override
- public ExecutionOutboundDetailRankTotalPO queryDetailTotal(ExecutionOutboundRankDO executionOutboundRankDO) {
- return executionOutboundRankMapper.queryDetailTotal(executionOutboundRankDO);
+ public ExecutionOutboundDetailRankTotalPO queryMaterialRankTotal(ExecutionOutboundRankDO executionOutboundRankDO) {
+ return executionOutboundRankMapper.queryMaterialRankTotal(executionOutboundRankDO);
+ }
+
+ @Override
+ public List queryLineRankList(ExecutionOutboundRankDO executionOutboundRankDO) {
+ return executionOutboundRankMapper.queryLineRankList(executionOutboundRankDO);
+ }
+
+ @Override
+ public ExecutionOutboundDetailRankTotalPO queryLineRankTotal(ExecutionOutboundRankDO executionOutboundRankDO) {
+ return executionOutboundRankMapper.queryLineRankTotal(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
deleted file mode 100644
index 2c37d7725..000000000
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/po/ExecutionOutboundDetailRankPO.java
+++ /dev/null
@@ -1,85 +0,0 @@
-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
index 355295a34..9ce960473 100644
--- 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
@@ -8,16 +8,16 @@ import java.io.Serializable;
import java.math.BigDecimal;
/**
- * 出库排名统计(明细)合计PO
+ * 出库排名统计合计PO
*
* 当前筛选条件下不分页的全量合计,随分页列表一起返回
- * (totalPieceCount/totalGrossWeightTon/totalVolume/totalOrderCount)
+ * (totalPieceCount/totalGrossWeightTon/totalVolume/totalOrderCount/totalLineCount)
*
* @author rcx
* @date 2026-08-31
*/
@Data
-@ApiModel(value = "出库排名统计明细合计对象", description = "出库排名统计明细合计响应对象")
+@ApiModel(value = "出库排名统计合计对象", description = "出库排名统计合计响应对象")
public class ExecutionOutboundDetailRankTotalPO implements Serializable {
private static final long serialVersionUID = 1L;
@@ -33,4 +33,7 @@ public class ExecutionOutboundDetailRankTotalPO implements Serializable {
@ApiModelProperty("仓单数合计(去重出库单数)")
private Long totalOrderCount;
+
+ @ApiModelProperty("线路数合计(去重线路数,线路排名使用)")
+ private Long totalLineCount;
}
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
new file mode 100644
index 000000000..a1beead56
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/po/ExecutionOutboundLineRankPO.java
@@ -0,0 +1,59 @@
+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(一行 = 线路×货品,日期区间内汇总)
+ *
+ * 按线路+物料编码合并:多张出库单合并为一行,单据级字段(种类/仓单编号/入库单号/客户编号/收货人/出仓日期)不提供;
+ * 仅统计带线路的出库单(line_code 为 2026-08-20 新增冗余字段,历史单为空,不参与线路排名);
+ * 件数 = SUM(CHECK_QUANTITY) 复核确认的实际出库量(与入库排名的实际上架量对称);
+ * 退保总额为占位字段,后端暂无对应数据来源,恒为 null
+ *
+ * @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 String materialCode;
+
+ @ApiModelProperty("货名")
+ @Excel(name = "货名")
+ private String materialName;
+
+ @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;
+}
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
new file mode 100644
index 000000000..497b9a205
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/outboundRank/repository/po/ExecutionOutboundMaterialRankPO.java
@@ -0,0 +1,50 @@
+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(CHECK_QUANTITY) 复核确认的实际出库量(与入库排名的实际上架量对称);
+ * 退保总额为占位字段,后端暂无对应数据来源,恒为 null
+ *
+ * @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 BigDecimal pieceCount;
+
+ @ApiModelProperty("毛重(吨)")
+ @Excel(name = "毛重(吨)")
+ private BigDecimal grossWeightTon;
+
+ @ApiModelProperty("体积(CBM)")
+ @Excel(name = "体积(CBM)")
+ private BigDecimal totalVolume;
+
+ @ApiModelProperty("退保总额(占位字段,后端暂无数据来源,恒为 null)")
+ @Excel(name = "退保总额")
+ private BigDecimal depositRefundAmount;
+}
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 2d68567c0..6b705c399 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,8 +4,9 @@ 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.ExecutionOutboundDetailRankPO;
import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundDetailRankTotalPO;
+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.todo.ExecutionOutboundRankDO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -14,7 +15,7 @@ import org.springframework.stereotype.Service;
import java.util.List;
/**
- * 出库排名统计(明细)应用服务
+ * 出库排名统计应用服务
*
* 负责登录用户组织隔离注入、日期区间校验,查询逻辑在 ExecutionOutboundRankDomainService → ExecutionOutboundRankMapper.xml(跨库取 WMS 出库数据)
*
@@ -29,26 +30,49 @@ public class ExecutionOutboundRankApplicationService {
private ExecutionOutboundRankDomainService executionOutboundRankDomainService;
/**
- * 分页查询出库明细列表
+ * 分页查询商品出库排名列表(货品聚合)
*/
- public List queryDetailList(ExecutionOutboundRankDO executionOutboundRankDO) {
+ public List queryMaterialRankList(ExecutionOutboundRankDO executionOutboundRankDO) {
fillLoginContext(executionOutboundRankDO);
- return executionOutboundRankDomainService.queryDetailList(executionOutboundRankDO);
+ return executionOutboundRankDomainService.queryMaterialRankList(executionOutboundRankDO);
}
/**
- * 出库明细合计(当前筛选条件全量,不分页)
+ * 商品出库排名合计(当前筛选条件全量,不分页)
*/
- public ExecutionOutboundDetailRankTotalPO queryDetailTotal(ExecutionOutboundRankDO executionOutboundRankDO) {
- return executionOutboundRankDomainService.queryDetailTotal(executionOutboundRankDO);
+ public ExecutionOutboundDetailRankTotalPO queryMaterialRankTotal(ExecutionOutboundRankDO executionOutboundRankDO) {
+ return executionOutboundRankDomainService.queryMaterialRankTotal(executionOutboundRankDO);
}
/**
- * 导出出库明细(不分页全量)
+ * 导出商品出库排名(不分页全量)
*/
- public List exportDetailList(ExecutionOutboundRankDO executionOutboundRankDO) {
+ public List exportMaterialRankList(ExecutionOutboundRankDO executionOutboundRankDO) {
fillLoginContext(executionOutboundRankDO);
- return executionOutboundRankDomainService.queryDetailList(executionOutboundRankDO);
+ return executionOutboundRankDomainService.queryMaterialRankList(executionOutboundRankDO);
+ }
+
+ /**
+ * 分页查询线路出库排名列表(线路×货品聚合)
+ */
+ public List queryLineRankList(ExecutionOutboundRankDO executionOutboundRankDO) {
+ fillLoginContext(executionOutboundRankDO);
+ return executionOutboundRankDomainService.queryLineRankList(executionOutboundRankDO);
+ }
+
+ /**
+ * 线路出库排名合计(当前筛选条件全量,不分页)
+ */
+ public ExecutionOutboundDetailRankTotalPO queryLineRankTotal(ExecutionOutboundRankDO executionOutboundRankDO) {
+ return executionOutboundRankDomainService.queryLineRankTotal(executionOutboundRankDO);
+ }
+
+ /**
+ * 导出线路出库排名(不分页全量)
+ */
+ public List exportLineRankList(ExecutionOutboundRankDO executionOutboundRankDO) {
+ fillLoginContext(executionOutboundRankDO);
+ return executionOutboundRankDomainService.queryLineRankList(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 7966fe6bd..95b54e602 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,8 +1,9 @@
package com.mhd.oms.domain.outboundRank.service;
import com.mhd.oms.domain.outboundRank.repository.facade.IExecutionOutboundRankService;
-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.po.ExecutionOutboundLineRankPO;
+import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundMaterialRankPO;
import com.mhd.oms.domain.outboundRank.repository.todo.ExecutionOutboundRankDO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -11,7 +12,7 @@ import org.springframework.stereotype.Service;
import java.util.List;
/**
- * 出库排名统计(明细)领域服务
+ * 出库排名统计领域服务
*
* @author rcx
* @date 2026-08-31
@@ -24,16 +25,30 @@ public class ExecutionOutboundRankDomainService {
private IExecutionOutboundRankService executionOutboundRankService;
/**
- * 出库明细列表
+ * 商品出库排名列表(货品聚合)
*/
- public List queryDetailList(ExecutionOutboundRankDO executionOutboundRankDO) {
- return executionOutboundRankService.queryDetailList(executionOutboundRankDO);
+ public List queryMaterialRankList(ExecutionOutboundRankDO executionOutboundRankDO) {
+ return executionOutboundRankService.queryMaterialRankList(executionOutboundRankDO);
}
/**
- * 出库明细合计(不分页)
+ * 商品出库排名合计(不分页)
*/
- public ExecutionOutboundDetailRankTotalPO queryDetailTotal(ExecutionOutboundRankDO executionOutboundRankDO) {
- return executionOutboundRankService.queryDetailTotal(executionOutboundRankDO);
+ public ExecutionOutboundDetailRankTotalPO queryMaterialRankTotal(ExecutionOutboundRankDO executionOutboundRankDO) {
+ return executionOutboundRankService.queryMaterialRankTotal(executionOutboundRankDO);
+ }
+
+ /**
+ * 线路出库排名列表(线路×货品聚合)
+ */
+ public List queryLineRankList(ExecutionOutboundRankDO executionOutboundRankDO) {
+ return executionOutboundRankService.queryLineRankList(executionOutboundRankDO);
+ }
+
+ /**
+ * 线路出库排名合计(不分页)
+ */
+ public ExecutionOutboundDetailRankTotalPO queryLineRankTotal(ExecutionOutboundRankDO executionOutboundRankDO) {
+ return executionOutboundRankService.queryLineRankTotal(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 81ae1b67a..e723269a6 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,8 +4,9 @@ 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.ExecutionOutboundDetailRankPO;
import com.mhd.oms.domain.outboundRank.repository.po.ExecutionOutboundDetailRankTotalPO;
+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.todo.ExecutionOutboundRankDO;
import com.mhd.oms.domain.outboundRank.repository.todo.ExecutionOutboundRankDTO;
import com.mhd.oms.domain.outboundRank.service.ExecutionOutboundRankApplicationService;
@@ -26,11 +27,14 @@ import java.util.List;
/**
* 出库排名统计Api
*
- * 按日期区间筛选出库明细列表(一行 = 仓单×货品,件数/毛重/体积按行汇总,按件数(实际复核出库量)降序,出仓日期/单号次之)。
- * OMS 库出库单状态不流转(无"已出库"数据),数据源跨库取 WMS 库出库表(NGWL_TEST_WMS.stock_out_order / out_material_detail),
- * 口径与 WMS 端 /outboundRankApi 完全一致,两边数字一致;统计条件:出库单创建时间 + 已出库及之后状态(9,12,13),明细仅取 level=1 主行。
- * 商品/线路两个 tab 各自独立接口,内部为同一份明细查询:商品接口忽略线路筛选参数,线路接口忽略商品筛选参数。
- * 字段:种类/仓单编号/入库单号/客户编号/收货人/货名/线路/件数/毛重(吨)/体积(CBM)/退保总额(占位null)/出仓日期
+ * 按日期区间筛选出库量统计排名,按出库数量(实际复核出库量)降序。
+ * 商品tab:一行 = 一个货品(货号/货名/件数/毛重(吨)/体积(CBM)/退保总额占位),跨出库单汇总,忽略线路筛选参数;
+ * 线路tab:一行 = 线路×货品(线路编码/线路/货号/货名/件数/毛重(吨)/体积(CBM)/退保总额占位),按线路+物料编码合并,
+ * 仅统计带线路的单,商品/线路筛选参数均生效;
+ * 统计口径:出库单创建时间 + 已出库及之后状态(9,12,13),明细仅取 level=1 主行;
+ * 件数 = SUM(CHECK_QUANTITY) 复核确认的实际出库量(与入库排名的实际上架量对称);
+ * 数据源跨库取 WMS 库出库表,口径与 WMS 端 /outboundRankApi 完全一致,两边数字一致;
+ * 退保总额后端暂无对应数据来源,恒为 null
*
* @author rcx
* @date 2026-08-31
@@ -58,25 +62,22 @@ public class ExecutionOutboundRankApi {
executionOutboundRankDO.setLineCode(null);
executionOutboundRankDO.setLineName(null);
startPage();
- List list = executionOutboundRankApplicationService.queryDetailList(executionOutboundRankDO);
- ExecutionOutboundDetailRankTotalPO total = executionOutboundRankApplicationService.queryDetailTotal(executionOutboundRankDO);
+ List list = executionOutboundRankApplicationService.queryMaterialRankList(executionOutboundRankDO);
+ ExecutionOutboundDetailRankTotalPO total = executionOutboundRankApplicationService.queryMaterialRankTotal(executionOutboundRankDO);
return getDataTableWithTotal(list, total);
}
/**
- * 分页查询线路出库排名列表(含合计行,线路tab;忽略商品筛选参数)
+ * 分页查询线路出库排名列表(含合计行,线路tab;一行=线路×货品,仅统计带线路的单)
*/
@ApiOperation("分页查询线路出库排名列表")
@GetMapping("/queryLineRankList")
public HashMap queryLineRankList(ExecutionOutboundRankDTO executionOutboundRankDTO) {
- //转换实体
+ //转换实体(线路tab:商品/线路筛选参数均生效,按线路+物料编码合并)
ExecutionOutboundRankDO executionOutboundRankDO = executionOutboundRankAssembler.toDO(executionOutboundRankDTO);
- //线路tab:忽略商品筛选参数
- executionOutboundRankDO.setMaterialCode(null);
- executionOutboundRankDO.setMaterialName(null);
startPage();
- List list = executionOutboundRankApplicationService.queryDetailList(executionOutboundRankDO);
- ExecutionOutboundDetailRankTotalPO total = executionOutboundRankApplicationService.queryDetailTotal(executionOutboundRankDO);
+ List list = executionOutboundRankApplicationService.queryLineRankList(executionOutboundRankDO);
+ ExecutionOutboundDetailRankTotalPO total = executionOutboundRankApplicationService.queryLineRankTotal(executionOutboundRankDO);
return getDataTableWithTotal(list, total);
}
@@ -91,41 +92,38 @@ public class ExecutionOutboundRankApi {
//商品tab:忽略线路筛选参数
executionOutboundRankDO.setLineCode(null);
executionOutboundRankDO.setLineName(null);
- List list = executionOutboundRankApplicationService.exportDetailList(executionOutboundRankDO);
+ List list = executionOutboundRankApplicationService.exportMaterialRankList(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<>(ExecutionOutboundDetailRankPO.class);
+ ExcelUtil util = new ExcelUtil<>(ExecutionOutboundMaterialRankPO.class);
util.exportExcel(response, list, "商品出库排名");
}
/**
- * 导出线路出库排名Excel(线路tab;忽略商品筛选参数)
+ * 导出线路出库排名Excel(线路tab;一行=线路×货品,仅统计带线路的单)
*/
@ApiOperation("导出线路出库排名Excel")
@GetMapping("/exportLineRank")
public void exportLineRank(HttpServletResponse response, ExecutionOutboundRankDTO executionOutboundRankDTO) throws Exception {
- //转换实体(不分页,导出全量)
+ //转换实体(不分页,导出全量;线路tab:商品/线路筛选参数均生效,按线路+物料编码合并)
ExecutionOutboundRankDO executionOutboundRankDO = executionOutboundRankAssembler.toDO(executionOutboundRankDTO);
- //线路tab:忽略商品筛选参数
- executionOutboundRankDO.setMaterialCode(null);
- executionOutboundRankDO.setMaterialName(null);
- List list = executionOutboundRankApplicationService.exportDetailList(executionOutboundRankDO);
+ List list = executionOutboundRankApplicationService.exportLineRankList(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<>(ExecutionOutboundDetailRankPO.class);
+ ExcelUtil util = new ExcelUtil<>(ExecutionOutboundLineRankPO.class);
util.exportExcel(response, list, "线路出库排名");
}
/**
- * 分页结果 + 合计行:data/total/code/msg 之外追加 totalPieceCount/totalGrossWeightTon/totalVolume/totalOrderCount
+ * 分页结果 + 合计行:data/total/code/msg 之外追加合计字段(商品tab含 totalOrderCount,线路tab含 totalOrderCount/totalLineCount)
*/
private HashMap getDataTableWithTotal(List> list, ExecutionOutboundDetailRankTotalPO total) {
HashMap result = new HashMap<>();
@@ -137,7 +135,12 @@ public class ExecutionOutboundRankApi {
result.put("totalPieceCount", total.getTotalPieceCount());
result.put("totalGrossWeightTon", total.getTotalGrossWeightTon());
result.put("totalVolume", total.getTotalVolume());
- result.put("totalOrderCount", total.getTotalOrderCount());
+ if (total.getTotalOrderCount() != null) {
+ result.put("totalOrderCount", total.getTotalOrderCount());
+ }
+ if (total.getTotalLineCount() != null) {
+ result.put("totalLineCount", total.getTotalLineCount());
+ }
}
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 62df4931f..260bf0f80 100644
--- a/mhd_oms/src/main/resources/mapper/outboundRank/ExecutionOutboundRankMapper.xml
+++ b/mhd_oms/src/main/resources/mapper/outboundRank/ExecutionOutboundRankMapper.xml
@@ -5,15 +5,17 @@
a.del_flag = 1
@@ -62,50 +64,70 @@
join NGWL_TEST_WMS.stock_out_order b on a.out_order_number = b.out_order_number and b.del_flag = 1
-
-
+
+
select
- 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.CHECK_QUANTITY), 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
+ IFNULL(SUM(a.TOTAL_VOLUME), 0) AS totalVolume
- GROUP BY b.out_order_number, a.material_code
- order by pieceCount desc, outboundDate desc, outOrderNumber desc
+ GROUP BY a.material_code
+ order by pieceCount desc, materialCode asc
-
-
+
select
- IFNULL(SUM(t.pieceCount), 0) AS totalPieceCount,
- ROUND(IFNULL(SUM(t.grossWeightKG), 0) / 1000, 3) AS totalGrossWeightTon,
- IFNULL(SUM(t.totalVolume), 0) AS totalVolume,
- COUNT(DISTINCT t.outOrderNumber) AS totalOrderCount
- from (
- select
- b.out_order_number AS outOrderNumber,
- IFNULL(SUM(a.CHECK_QUANTITY), 0) AS pieceCount,
- IFNULL(SUM(a.TOTAL_GROSS_WEIGHT), 0) AS grossWeightKG,
- IFNULL(SUM(a.TOTAL_VOLUME), 0) AS totalVolume
-
-
-
-
- GROUP BY b.out_order_number, a.material_code
- ) t
+ IFNULL(SUM(a.CHECK_QUANTITY), 0) AS totalPieceCount,
+ ROUND(IFNULL(SUM(a.TOTAL_GROSS_WEIGHT), 0) / 1000, 3) AS totalGrossWeightTon,
+ IFNULL(SUM(a.TOTAL_VOLUME), 0) AS totalVolume,
+ COUNT(DISTINCT a.out_order_number) AS totalOrderCount
+
+
+
+
+
+
+
+
+ select
+ b.line_code AS lineCode,
+ MAX(b.line_name) AS lineName,
+ a.material_code AS materialCode,
+ MAX(a.material_name) AS materialName,
+ IFNULL(SUM(a.CHECK_QUANTITY), 0) AS pieceCount,
+ ROUND(IFNULL(SUM(a.TOTAL_GROSS_WEIGHT), 0) / 1000, 3) AS grossWeightTon,
+ IFNULL(SUM(a.TOTAL_VOLUME), 0) AS totalVolume
+
+
+
+ and b.line_code is not null and b.line_code != ''
+
+ GROUP BY b.line_code, a.material_code
+ order by pieceCount desc, lineCode asc, materialCode asc
+
+
+
+
+ select
+ IFNULL(SUM(a.CHECK_QUANTITY), 0) AS totalPieceCount,
+ ROUND(IFNULL(SUM(a.TOTAL_GROSS_WEIGHT), 0) / 1000, 3) AS totalGrossWeightTon,
+ IFNULL(SUM(a.TOTAL_VOLUME), 0) AS totalVolume,
+ COUNT(DISTINCT b.line_code) AS totalLineCount,
+ COUNT(DISTINCT b.out_order_number) AS totalOrderCount
+
+
+
+ and b.line_code is not null and b.line_code != ''
+
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 0082a8ed4..d6980900f 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,8 +6,9 @@ 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.OutboundDetailRankPO;
import com.mhd.wms.domain.outboundRank.repository.po.OutboundDetailRankTotalPO;
+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.todo.OutboundRankDO;
import com.mhd.wms.domain.outboundRank.service.OutboundRankDomainService;
import lombok.extern.slf4j.Slf4j;
@@ -17,7 +18,7 @@ import org.springframework.stereotype.Service;
import java.util.List;
/**
- * 出库排名统计(明细)应用服务
+ * 出库排名统计应用服务
*
* 负责登录用户组织隔离注入、日期区间校验,查询逻辑在 OutboundRankDomainService → OutboundRankMapper.xml
*
@@ -32,26 +33,49 @@ public class OutboundRankApplicationService {
private OutboundRankDomainService outboundRankDomainService;
/**
- * 分页查询出库明细列表
+ * 分页查询商品出库排名列表(货品聚合)
*/
- public List queryDetailList(OutboundRankDO outboundRankDO) {
+ public List queryMaterialRankList(OutboundRankDO outboundRankDO) {
fillLoginContext(outboundRankDO);
- return outboundRankDomainService.queryDetailList(outboundRankDO);
+ return outboundRankDomainService.queryMaterialRankList(outboundRankDO);
}
/**
- * 出库明细合计(当前筛选条件全量,不分页)
+ * 商品出库排名合计(当前筛选条件全量,不分页)
*/
- public OutboundDetailRankTotalPO queryDetailTotal(OutboundRankDO outboundRankDO) {
- return outboundRankDomainService.queryDetailTotal(outboundRankDO);
+ public OutboundDetailRankTotalPO queryMaterialRankTotal(OutboundRankDO outboundRankDO) {
+ return outboundRankDomainService.queryMaterialRankTotal(outboundRankDO);
}
/**
- * 导出出库明细(不分页全量)
+ * 导出商品出库排名(不分页全量)
*/
- public List exportDetailList(OutboundRankDO outboundRankDO) {
+ public List exportMaterialRankList(OutboundRankDO outboundRankDO) {
fillLoginContext(outboundRankDO);
- return outboundRankDomainService.queryDetailList(outboundRankDO);
+ return outboundRankDomainService.queryMaterialRankList(outboundRankDO);
+ }
+
+ /**
+ * 分页查询线路出库排名列表(线路×货品聚合)
+ */
+ public List queryLineRankList(OutboundRankDO outboundRankDO) {
+ fillLoginContext(outboundRankDO);
+ return outboundRankDomainService.queryLineRankList(outboundRankDO);
+ }
+
+ /**
+ * 线路出库排名合计(当前筛选条件全量,不分页)
+ */
+ public OutboundDetailRankTotalPO queryLineRankTotal(OutboundRankDO outboundRankDO) {
+ return outboundRankDomainService.queryLineRankTotal(outboundRankDO);
+ }
+
+ /**
+ * 导出线路出库排名(不分页全量)
+ */
+ public List exportLineRankList(OutboundRankDO outboundRankDO) {
+ fillLoginContext(outboundRankDO);
+ return outboundRankDomainService.queryLineRankList(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 f20e1a989..2bc25d4a3 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,13 +1,14 @@
package com.mhd.wms.domain.outboundRank.repository.facade;
-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.po.OutboundLineRankPO;
+import com.mhd.wms.domain.outboundRank.repository.po.OutboundMaterialRankPO;
import com.mhd.wms.domain.outboundRank.repository.todo.OutboundRankDO;
import java.util.List;
/**
- * 出库排名统计(明细)Service接口
+ * 出库排名统计Service接口
*
* @author rcx
* @date 2026-08-31
@@ -15,12 +16,22 @@ import java.util.List;
public interface IOutboundRankService {
/**
- * 出库明细列表
+ * 商品出库排名列表(货品聚合)
*/
- List queryDetailList(OutboundRankDO outboundRankDO);
+ List queryMaterialRankList(OutboundRankDO outboundRankDO);
/**
- * 出库明细合计(不分页)
+ * 商品出库排名合计(不分页)
*/
- OutboundDetailRankTotalPO queryDetailTotal(OutboundRankDO outboundRankDO);
+ OutboundDetailRankTotalPO queryMaterialRankTotal(OutboundRankDO outboundRankDO);
+
+ /**
+ * 线路出库排名列表(线路×货品聚合)
+ */
+ List queryLineRankList(OutboundRankDO outboundRankDO);
+
+ /**
+ * 线路出库排名合计(不分页)
+ */
+ OutboundDetailRankTotalPO queryLineRankTotal(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 ee09b891f..ff5f702d8 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,13 +1,14 @@
package com.mhd.wms.domain.outboundRank.repository.mapper;
-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.po.OutboundLineRankPO;
+import com.mhd.wms.domain.outboundRank.repository.po.OutboundMaterialRankPO;
import com.mhd.wms.domain.outboundRank.repository.todo.OutboundRankDO;
import java.util.List;
/**
- * 出库排名统计(明细)Mapper接口
+ * 出库排名统计Mapper接口
*
* @author rcx
* @date 2026-08-31
@@ -15,12 +16,22 @@ import java.util.List;
public interface OutboundRankMapper {
/**
- * 出库明细列表(一行=仓单×货品,按件数倒序)
+ * 商品出库排名列表(一行=一个货品,跨单汇总,按实际出库量降序)
*/
- List queryDetailList(OutboundRankDO outboundRankDO);
+ List queryMaterialRankList(OutboundRankDO outboundRankDO);
/**
- * 出库明细合计(不分页,当前筛选条件全量合计)
+ * 商品出库排名合计(不分页,当前筛选条件全量合计)
*/
- OutboundDetailRankTotalPO queryDetailTotal(OutboundRankDO outboundRankDO);
+ OutboundDetailRankTotalPO queryMaterialRankTotal(OutboundRankDO outboundRankDO);
+
+ /**
+ * 线路出库排名列表(一行=线路×货品,按实际出库量降序,仅统计带线路的单)
+ */
+ List queryLineRankList(OutboundRankDO outboundRankDO);
+
+ /**
+ * 线路出库排名合计(不分页,当前筛选条件全量合计)
+ */
+ OutboundDetailRankTotalPO queryLineRankTotal(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 4108d2dd4..6555dc647 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,8 +2,9 @@ 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.OutboundDetailRankPO;
import com.mhd.wms.domain.outboundRank.repository.po.OutboundDetailRankTotalPO;
+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.todo.OutboundRankDO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -11,7 +12,7 @@ import org.springframework.stereotype.Service;
import java.util.List;
/**
- * 出库排名统计(明细)Service业务层处理
+ * 出库排名统计Service业务层处理
*
* @author rcx
* @date 2026-08-31
@@ -23,12 +24,22 @@ public class OutboundRankImpl implements IOutboundRankService {
private OutboundRankMapper outboundRankMapper;
@Override
- public List queryDetailList(OutboundRankDO outboundRankDO) {
- return outboundRankMapper.queryDetailList(outboundRankDO);
+ public List queryMaterialRankList(OutboundRankDO outboundRankDO) {
+ return outboundRankMapper.queryMaterialRankList(outboundRankDO);
}
@Override
- public OutboundDetailRankTotalPO queryDetailTotal(OutboundRankDO outboundRankDO) {
- return outboundRankMapper.queryDetailTotal(outboundRankDO);
+ public OutboundDetailRankTotalPO queryMaterialRankTotal(OutboundRankDO outboundRankDO) {
+ return outboundRankMapper.queryMaterialRankTotal(outboundRankDO);
+ }
+
+ @Override
+ public List queryLineRankList(OutboundRankDO outboundRankDO) {
+ return outboundRankMapper.queryLineRankList(outboundRankDO);
+ }
+
+ @Override
+ public OutboundDetailRankTotalPO queryLineRankTotal(OutboundRankDO outboundRankDO) {
+ return outboundRankMapper.queryLineRankTotal(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
deleted file mode 100644
index 4be88b6a7..000000000
--- a/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundDetailRankPO.java
+++ /dev/null
@@ -1,85 +0,0 @@
-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
index 5b37776c7..397126046 100644
--- 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
@@ -33,4 +33,7 @@ public class OutboundDetailRankTotalPO implements Serializable {
@ApiModelProperty("仓单数合计(去重出库单数)")
private Long totalOrderCount;
+
+ @ApiModelProperty("线路数合计(去重线路数,线路排名使用)")
+ private Long totalLineCount;
}
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
new file mode 100644
index 000000000..38b7ecc4a
--- /dev/null
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundLineRankPO.java
@@ -0,0 +1,59 @@
+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(一行 = 线路×货品,日期区间内汇总)
+ *
+ * 按线路+物料编码合并:多张出库单合并为一行,单据级字段(种类/仓单编号/入库单号/客户编号/收货人/出仓日期)不提供;
+ * 仅统计带线路的出库单(line_code 为 2026-08-20 新增冗余字段,历史单为空,不参与线路排名);
+ * 件数 = SUM(CHECK_QUANTITY) 复核确认的实际出库量(与入库排名的实际上架量对称);
+ * 退保总额为占位字段,后端暂无对应数据来源,恒为 null
+ *
+ * @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 String materialCode;
+
+ @ApiModelProperty("货名")
+ @Excel(name = "货名")
+ private String materialName;
+
+ @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;
+}
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
new file mode 100644
index 000000000..d58cac1d5
--- /dev/null
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outboundRank/repository/po/OutboundMaterialRankPO.java
@@ -0,0 +1,50 @@
+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(CHECK_QUANTITY) 复核确认的实际出库量(与入库排名的实际上架量对称);
+ * 退保总额为占位字段,后端暂无对应数据来源,恒为 null
+ *
+ * @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 BigDecimal pieceCount;
+
+ @ApiModelProperty("毛重(吨)")
+ @Excel(name = "毛重(吨)")
+ private BigDecimal grossWeightTon;
+
+ @ApiModelProperty("体积(CBM)")
+ @Excel(name = "体积(CBM)")
+ private BigDecimal totalVolume;
+
+ @ApiModelProperty("退保总额(占位字段,后端暂无数据来源,恒为 null)")
+ @Excel(name = "退保总额")
+ private BigDecimal depositRefundAmount;
+}
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 0b21ed65e..18af50291 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,8 +1,9 @@
package com.mhd.wms.domain.outboundRank.service;
import com.mhd.wms.domain.outboundRank.repository.facade.IOutboundRankService;
-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.po.OutboundLineRankPO;
+import com.mhd.wms.domain.outboundRank.repository.po.OutboundMaterialRankPO;
import com.mhd.wms.domain.outboundRank.repository.todo.OutboundRankDO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -11,7 +12,7 @@ import org.springframework.stereotype.Service;
import java.util.List;
/**
- * 出库排名统计(明细)领域服务
+ * 出库排名统计领域服务
*
* @author rcx
* @date 2026-08-31
@@ -24,16 +25,30 @@ public class OutboundRankDomainService {
private IOutboundRankService outboundRankService;
/**
- * 出库明细列表
+ * 商品出库排名列表(货品聚合)
*/
- public List queryDetailList(OutboundRankDO outboundRankDO) {
- return outboundRankService.queryDetailList(outboundRankDO);
+ public List queryMaterialRankList(OutboundRankDO outboundRankDO) {
+ return outboundRankService.queryMaterialRankList(outboundRankDO);
}
/**
- * 出库明细合计(不分页)
+ * 商品出库排名合计(不分页)
*/
- public OutboundDetailRankTotalPO queryDetailTotal(OutboundRankDO outboundRankDO) {
- return outboundRankService.queryDetailTotal(outboundRankDO);
+ public OutboundDetailRankTotalPO queryMaterialRankTotal(OutboundRankDO outboundRankDO) {
+ return outboundRankService.queryMaterialRankTotal(outboundRankDO);
+ }
+
+ /**
+ * 线路出库排名列表(线路×货品聚合)
+ */
+ public List queryLineRankList(OutboundRankDO outboundRankDO) {
+ return outboundRankService.queryLineRankList(outboundRankDO);
+ }
+
+ /**
+ * 线路出库排名合计(不分页)
+ */
+ public OutboundDetailRankTotalPO queryLineRankTotal(OutboundRankDO outboundRankDO) {
+ return outboundRankService.queryLineRankTotal(outboundRankDO);
}
}
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 a7cccda65..649e3906a 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,8 +5,9 @@ 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.OutboundDetailRankPO;
import com.mhd.wms.domain.outboundRank.repository.po.OutboundDetailRankTotalPO;
+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.todo.OutboundRankDO;
import com.mhd.wms.interfaces.assember.outboundRank.OutboundRankAssembler;
import com.mhd.wms.interfaces.dto.outboundRank.OutboundRankDTO;
@@ -25,10 +26,13 @@ import java.util.List;
/**
* 出库排名统计Api
*
- * 按日期区间筛选出库明细列表(一行 = 仓单×货品,件数/毛重/体积按行汇总,按件数(实际复核出库量)降序,出仓日期/单号次之)。
- * 统计口径:出库单创建时间 + 已出库及之后状态(9,12,13),明细仅取 level=1 主行。
- * 商品/线路两个 tab 各自独立接口,内部为同一份明细查询:商品接口忽略线路筛选参数,线路接口忽略商品筛选参数。
- * 字段:种类/仓单编号/入库单号/客户编号/收货人/货名/线路/件数/毛重(吨)/体积(CBM)/退保总额(占位null)/出仓日期
+ * 按日期区间筛选出库量统计排名,按出库数量(实际复核出库量)降序。
+ * 商品tab:一行 = 一个货品(货号/货名/件数/毛重(吨)/体积(CBM)/退保总额占位),跨出库单汇总,忽略线路筛选参数;
+ * 线路tab:一行 = 线路×货品(线路编码/线路/货号/货名/件数/毛重(吨)/体积(CBM)/退保总额占位),按线路+物料编码合并,
+ * 仅统计带线路的单,商品/线路筛选参数均生效;
+ * 统计口径:出库单创建时间 + 已出库及之后状态(9,12,13),明细仅取 level=1 主行;
+ * 件数 = SUM(CHECK_QUANTITY) 复核确认的实际出库量(与入库排名的实际上架量对称);
+ * 退保总额后端暂无对应数据来源,恒为 null
*
* @author rcx
* @date 2026-08-31
@@ -55,25 +59,22 @@ public class OutboundRankApi {
outboundRankDO.setLineCode(null);
outboundRankDO.setLineName(null);
startPage();
- List list = outboundRankApplicationService.queryDetailList(outboundRankDO);
- OutboundDetailRankTotalPO total = outboundRankApplicationService.queryDetailTotal(outboundRankDO);
+ List list = outboundRankApplicationService.queryMaterialRankList(outboundRankDO);
+ OutboundDetailRankTotalPO total = outboundRankApplicationService.queryMaterialRankTotal(outboundRankDO);
return getDataTableWithTotal(list, total);
}
/**
- * 分页查询线路出库排名列表(含合计行,线路tab;忽略商品筛选参数)
+ * 分页查询线路出库排名列表(含合计行,线路tab;一行=线路×货品,仅统计带线路的单)
*/
@ApiOperation("分页查询线路出库排名列表")
@GetMapping("/queryLineRankList")
public HashMap queryLineRankList(OutboundRankDTO outboundRankDTO) {
- //转换实体
+ //转换实体(线路tab:商品/线路筛选参数均生效,按线路+物料编码合并)
OutboundRankDO outboundRankDO = outboundRankAssembler.toDO(outboundRankDTO);
- //线路tab:忽略商品筛选参数
- outboundRankDO.setMaterialCode(null);
- outboundRankDO.setMaterialName(null);
startPage();
- List list = outboundRankApplicationService.queryDetailList(outboundRankDO);
- OutboundDetailRankTotalPO total = outboundRankApplicationService.queryDetailTotal(outboundRankDO);
+ List list = outboundRankApplicationService.queryLineRankList(outboundRankDO);
+ OutboundDetailRankTotalPO total = outboundRankApplicationService.queryLineRankTotal(outboundRankDO);
return getDataTableWithTotal(list, total);
}
@@ -88,41 +89,38 @@ public class OutboundRankApi {
//商品tab:忽略线路筛选参数
outboundRankDO.setLineCode(null);
outboundRankDO.setLineName(null);
- List list = outboundRankApplicationService.exportDetailList(outboundRankDO);
+ List list = outboundRankApplicationService.exportMaterialRankList(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<>(OutboundDetailRankPO.class);
+ ExcelUtil util = new ExcelUtil<>(OutboundMaterialRankPO.class);
util.exportExcel(response, list, "商品出库排名");
}
/**
- * 导出线路出库排名Excel(线路tab;忽略商品筛选参数)
+ * 导出线路出库排名Excel(线路tab;一行=线路×货品,仅统计带线路的单)
*/
@ApiOperation("导出线路出库排名Excel")
@GetMapping("/exportLineRank")
public void exportLineRank(HttpServletResponse response, OutboundRankDTO outboundRankDTO) throws Exception {
- //转换实体(不分页,导出全量)
+ //转换实体(不分页,导出全量;线路tab:商品/线路筛选参数均生效,按线路+物料编码合并)
OutboundRankDO outboundRankDO = outboundRankAssembler.toDO(outboundRankDTO);
- //线路tab:忽略商品筛选参数
- outboundRankDO.setMaterialCode(null);
- outboundRankDO.setMaterialName(null);
- List list = outboundRankApplicationService.exportDetailList(outboundRankDO);
+ List list = outboundRankApplicationService.exportLineRankList(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<>(OutboundDetailRankPO.class);
+ ExcelUtil util = new ExcelUtil<>(OutboundLineRankPO.class);
util.exportExcel(response, list, "线路出库排名");
}
/**
- * 分页结果 + 合计行:data/total/code/msg 之外追加 totalPieceCount/totalGrossWeightTon/totalVolume/totalOrderCount
+ * 分页结果 + 合计行:data/total/code/msg 之外追加合计字段(商品tab含 totalOrderCount,线路tab含 totalOrderCount/totalLineCount)
*/
private HashMap getDataTableWithTotal(List> list, OutboundDetailRankTotalPO total) {
HashMap result = new HashMap<>();
@@ -134,7 +132,12 @@ public class OutboundRankApi {
result.put("totalPieceCount", total.getTotalPieceCount());
result.put("totalGrossWeightTon", total.getTotalGrossWeightTon());
result.put("totalVolume", total.getTotalVolume());
- result.put("totalOrderCount", total.getTotalOrderCount());
+ if (total.getTotalOrderCount() != null) {
+ result.put("totalOrderCount", total.getTotalOrderCount());
+ }
+ if (total.getTotalLineCount() != null) {
+ result.put("totalLineCount", total.getTotalLineCount());
+ }
}
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 095d5eba0..b35a01337 100644
--- a/mhd_wms/src/main/resources/mapper/outboundRank/OutboundRankMapper.xml
+++ b/mhd_wms/src/main/resources/mapper/outboundRank/OutboundRankMapper.xml
@@ -5,12 +5,13 @@
a.del_flag = 1
@@ -62,50 +63,70 @@
join stock_out_order b on a.out_order_number = b.out_order_number and b.del_flag = 1
-
-
+
+
select
- 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.CHECK_QUANTITY), 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
+ IFNULL(SUM(a.TOTAL_VOLUME), 0) AS totalVolume
- GROUP BY b.out_order_number, a.material_code
- order by pieceCount desc, outboundDate desc, outOrderNumber desc
+ GROUP BY a.material_code
+ order by pieceCount desc, materialCode asc
-
-
+
select
- IFNULL(SUM(t.pieceCount), 0) AS totalPieceCount,
- ROUND(IFNULL(SUM(t.grossWeightKG), 0) / 1000, 3) AS totalGrossWeightTon,
- IFNULL(SUM(t.totalVolume), 0) AS totalVolume,
- COUNT(DISTINCT t.outOrderNumber) AS totalOrderCount
- from (
- select
- b.out_order_number AS outOrderNumber,
- IFNULL(SUM(a.CHECK_QUANTITY), 0) AS pieceCount,
- IFNULL(SUM(a.TOTAL_GROSS_WEIGHT), 0) AS grossWeightKG,
- IFNULL(SUM(a.TOTAL_VOLUME), 0) AS totalVolume
-
-
-
-
- GROUP BY b.out_order_number, a.material_code
- ) t
+ IFNULL(SUM(a.CHECK_QUANTITY), 0) AS totalPieceCount,
+ ROUND(IFNULL(SUM(a.TOTAL_GROSS_WEIGHT), 0) / 1000, 3) AS totalGrossWeightTon,
+ IFNULL(SUM(a.TOTAL_VOLUME), 0) AS totalVolume,
+ COUNT(DISTINCT a.out_order_number) AS totalOrderCount
+
+
+
+
+
+
+
+
+ select
+ b.line_code AS lineCode,
+ MAX(b.line_name) AS lineName,
+ a.material_code AS materialCode,
+ MAX(a.material_name) AS materialName,
+ IFNULL(SUM(a.CHECK_QUANTITY), 0) AS pieceCount,
+ ROUND(IFNULL(SUM(a.TOTAL_GROSS_WEIGHT), 0) / 1000, 3) AS grossWeightTon,
+ IFNULL(SUM(a.TOTAL_VOLUME), 0) AS totalVolume
+
+
+
+ and b.line_code is not null and b.line_code != ''
+
+ GROUP BY b.line_code, a.material_code
+ order by pieceCount desc, lineCode asc, materialCode asc
+
+
+
+
+ select
+ IFNULL(SUM(a.CHECK_QUANTITY), 0) AS totalPieceCount,
+ ROUND(IFNULL(SUM(a.TOTAL_GROSS_WEIGHT), 0) / 1000, 3) AS totalGrossWeightTon,
+ IFNULL(SUM(a.TOTAL_VOLUME), 0) AS totalVolume,
+ COUNT(DISTINCT b.line_code) AS totalLineCount,
+ COUNT(DISTINCT b.out_order_number) AS totalOrderCount
+
+
+
+ and b.line_code is not null and b.line_code != ''
+
From 34496de969e4a12a2ce1356b44fc3a46ae5f4426 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Thu, 3 Sep 2026 16:04:04 +0800
Subject: [PATCH 71/87] =?UTF-8?q?=E5=8F=91=E6=B5=8B=E8=AF=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/com/mhd/system/api/BmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/OmsServiceFeign.java | 2 +-
.../main/java/com/mhd/system/api/WlhyServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/YmsServiceFeign.java | 2 +-
.../com/mhd/common/core/feign/ThirdPartyServiceFeign.java | 2 +-
.../oms/infrastructure/feign/ThirdPartyServiceFeign.java | 2 +-
mhd_oms/src/main/resources/bootstrap.yml | 8 ++++----
mhd_wms/src/main/resources/bootstrap.yml | 8 ++++----
9 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
index e18484e8d..0d65c89a1 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
@@ -18,7 +18,7 @@ import java.util.Set;
/**
* bms财务结算系统feign调用接口
*/
-@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.3:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.33.0.129:8012",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface BmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
index e9418197a..8a7006304 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.concurrent.CompletableFuture;
-@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.4:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.33.0.99:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface OmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
index de19e469b..ba9a45148 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
@@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
-@FeignClient(contextId = "commonWlhyServiceFeign",url = "http://10.102.192.30:8014",value = ServiceNameConstants.WLHY_SERVICE,configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.33.0.129:8014",configuration = FeignAutoConfiguration.class)
public interface WlhyServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
index 26a92624c..7fbd7dd9b 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
@@ -21,7 +21,7 @@ import java.util.Map;
* @description: TODO
* @date 2024/5/10 8:58
**/
-@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.3:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.33.0.109:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface WmsServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
index 12571141a..beba5b1af 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
@@ -9,7 +9,7 @@ import com.mhd.system.api.feign.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
-@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.4:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.33.0.99:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface YmsServiceFeign {
/**
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
index 6238639f6..9fd21ae67 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
@@ -26,7 +26,7 @@ import java.io.InputStream;
import java.util.List;
import java.util.Map;
-@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.30:8012", configuration = FeignAutoConfiguration.class)
+@FeignClient(value = "mhd-third-party-service",url = "http://10.33.0.129:8012",configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
index ca93d3312..376500b1c 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
@@ -22,7 +22,7 @@ import java.util.Map;
/**
* 三方服务 Feign
*/
-@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.30:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.33.0.129:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/resources/bootstrap.yml b/mhd_oms/src/main/resources/bootstrap.yml
index ee058f0f6..88471e390 100644
--- a/mhd_oms/src/main/resources/bootstrap.yml
+++ b/mhd_oms/src/main/resources/bootstrap.yml
@@ -18,15 +18,15 @@ spring:
discovery:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
-# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.30:6848
+ server-addr: 10.33.0.129:6010
+# server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
config:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
-# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.30:6848
+ server-addr: 10.33.0.129:6010
+# server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
diff --git a/mhd_wms/src/main/resources/bootstrap.yml b/mhd_wms/src/main/resources/bootstrap.yml
index 52ade270d..39eb710cb 100644
--- a/mhd_wms/src/main/resources/bootstrap.yml
+++ b/mhd_wms/src/main/resources/bootstrap.yml
@@ -14,18 +14,18 @@ spring:
nacos:
discovery:
# server-addr: 127.0.0.1:8848
-# server-addr: 10.33.0.129:6010
+ server-addr: 10.33.0.129:6010
# 线上测试环境配置 容器名+端口号
- server-addr: 10.102.192.31:6848
+# server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
# server-addr: 10.102.192.105:6848
config:
# server-addr: 127.0.0.1:8848
-# server-addr: 10.33.0.129:
+ server-addr: 10.33.0.129:6010
# 线上测试环境配置 容器名+端口号
- server-addr: 10.102.192.31:6848
+# server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From fee891dad00056186ad3d5265f72fb6abd73afbf Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Thu, 3 Sep 2026 17:44:16 +0800
Subject: [PATCH 72/87] =?UTF-8?q?fix(oms):=20=E4=B8=8B=E5=8F=91=E5=87=BA?=
=?UTF-8?q?=E5=BA=93=E5=8D=95=E5=A2=9E=E5=8A=A0=E5=B9=82=E7=AD=89=E6=8B=A6?=
=?UTF-8?q?=E6=88=AA=EF=BC=8C=E5=B7=B2=E5=AD=98=E5=9C=A8=E6=9C=89=E6=95=88?=
=?UTF-8?q?=E6=89=A7=E8=A1=8C=E5=8D=95=E6=97=B6=E7=A6=81=E6=AD=A2=E9=87=8D?=
=?UTF-8?q?=E5=A4=8D=E4=B8=8B=E5=8F=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
问题:单据下发过并取消后重新下发(或重复点下发),issueOrder 会再生成新执行单并原样复制业务明细uniqueId插入,撞执行明细表唯一约束(如CONS134279709)导致下发失败。
修复:issueOrder 生成执行单前先查同业务单号下是否已存在有效执行单(del_flag=1),存在则提示「已下发,请勿重复下发;如需重新下发请先取消下发」。
配套DB变更(单独由DBA执行):执行明细表唯一键CONS134279709改为函数唯一索引,仅对DEL_FLAG=1的行约束UNIQUE_ID唯一,软删行不再占用唯一键。
---
.../service/ReservationStockOutOrderDomainService.java | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java
index bde5e11a3..a90e17cdb 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java
@@ -514,6 +514,13 @@ public class ReservationStockOutOrderDomainService {
for (Long inOrderId : inOrderIds) {
ReservationStockOutOrder byId = stockOutOrderService.getById(inOrderId);
String inOrderNumber = byId.getOutOrderNumber();
+ // 幂等拦截:已存在有效执行单时禁止重复下发(重复下发会生成新执行单并原样复制明细uniqueId,撞执行明细表唯一约束)
+ long activeExecutionCount = executionStockOutOrderService.count(new QueryWrapper().lambda()
+ .eq(ExecutionStockOutOrder::getBusinessOutOrderNumber, inOrderNumber)
+ .eq(ExecutionStockOutOrder::getDelFlag, 1));
+ if (activeExecutionCount > 0) {
+ throw new ServiceException("出库单[" + inOrderNumber + "]已下发,请勿重复下发;如需重新下发请先取消下发");
+ }
List executionInOrderNumbers = new ArrayList<>();
List materialDetailList = outMaterialDetailService.list(new QueryWrapper().lambda().eq(ReservationOutMaterialDetail::getOutOrderNumber, inOrderNumber));
From 0eb47793a8c78d087d34a8665f3fa1fb9ca8b249 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Thu, 3 Sep 2026 18:00:52 +0800
Subject: [PATCH 73/87] =?UTF-8?q?fix(=E5=BA=93=E5=AD=98):=20OMS/WMS?=
=?UTF-8?q?=E5=BA=93=E5=AD=98=E6=9F=A5=E8=AF=A2=E5=85=A5=E5=BA=93=E6=97=B6?=
=?UTF-8?q?=E9=97=B4/=E6=9B=B4=E6=96=B0=E6=97=B6=E9=97=B4=E5=8F=AA?=
=?UTF-8?q?=E4=BF=9D=E7=95=99=E5=B9=B4=E6=9C=88=E6=97=A5=EF=BC=8C=E5=8E=BB?=
=?UTF-8?q?=E6=8E=89=E6=97=B6=E5=88=86=E7=A7=92?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 入库时间(createTime)/更新时间(updateTime)继承自全系统基类 BaseVOEntity,默认序列化带时分秒;库存查询导出复用 /list 接口,前端取 JSON 值直接进 Excel,导出后无法在 Excel 里修改格式
- 两个库存 PO 覆盖 getCreateTime/getUpdateTime 并收窄 @JsonFormat 为 yyyy-MM-dd,仅影响 OMS/WMS 库存查询的显示与导出,不改动 BaseVOEntity 全局行为
- 页面列表/详情回显同步变为纯年月日;排序仍按原始时间值,逻辑不变
---
.../po/ReservationMaterialInventoryPO.java | 15 +++++++++++++++
.../repository/po/MaterialInventoryPO.java | 15 +++++++++++++++
2 files changed, 30 insertions(+)
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/po/ReservationMaterialInventoryPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/po/ReservationMaterialInventoryPO.java
index 364e0bb55..175f9f3dc 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/po/ReservationMaterialInventoryPO.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationMaterialInventory/repository/po/ReservationMaterialInventoryPO.java
@@ -232,4 +232,19 @@ public class ReservationMaterialInventoryPO extends MaterialBasePO {
@ApiModelProperty("LOT编号")
@Excel(name = "LOT编号")
private String lotNumber;
+
+ // 入库时间(createTime)/更新时间(updateTime)继承自 BaseVOEntity,默认带时分秒;
+ // 库存查询导出复用 /list 接口,前端取 JSON 值直接进 Excel,这里覆盖 getter 只保留年月日。
+ // 不改 BaseVOEntity(全系统基类,其他模块时间列仍需时分秒),仅收窄本 PO 的序列化格式(与 WMS 库存查询一致)
+ @Override
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ public Date getCreateTime() {
+ return super.getCreateTime();
+ }
+
+ @Override
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ public Date getUpdateTime() {
+ return super.getUpdateTime();
+ }
}
\ No newline at end of file
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/po/MaterialInventoryPO.java b/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/po/MaterialInventoryPO.java
index f785b7190..6a1bc7539 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/po/MaterialInventoryPO.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/materialInventory/repository/po/MaterialInventoryPO.java
@@ -240,4 +240,19 @@ public class MaterialInventoryPO extends MaterialBasePO {
@ApiModelProperty("规格型号")
@Excel(name = "规格型号")
private String specificationModel;
+
+ // 入库时间(createTime)/更新时间(updateTime)继承自 BaseVOEntity,默认带时分秒;
+ // 库存查询导出复用 /list 接口,前端取 JSON 值直接进 Excel,这里覆盖 getter 只保留年月日。
+ // 不改 BaseVOEntity(全系统基类,其他模块时间列仍需时分秒),仅收窄本 PO 的序列化格式(与 OMS 库存查询一致)
+ @Override
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ public Date getCreateTime() {
+ return super.getCreateTime();
+ }
+
+ @Override
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ public Date getUpdateTime() {
+ return super.getUpdateTime();
+ }
}
\ No newline at end of file
From bf3f0a2bfe822acf777cd1056986ec1e7395c481 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Thu, 3 Sep 2026 18:25:37 +0800
Subject: [PATCH 74/87] =?UTF-8?q?=E5=8F=91=2030?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/com/mhd/system/api/BmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/OmsServiceFeign.java | 2 +-
.../main/java/com/mhd/system/api/WlhyServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/YmsServiceFeign.java | 2 +-
.../com/mhd/common/core/feign/ThirdPartyServiceFeign.java | 2 +-
.../oms/infrastructure/feign/ThirdPartyServiceFeign.java | 2 +-
mhd_oms/src/main/resources/bootstrap.yml | 8 ++++----
mhd_wms/src/main/resources/bootstrap.yml | 8 ++++----
9 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
index 0d65c89a1..e18484e8d 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
@@ -18,7 +18,7 @@ import java.util.Set;
/**
* bms财务结算系统feign调用接口
*/
-@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.33.0.129:8012",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.3:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface BmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
index 8a7006304..e9418197a 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.concurrent.CompletableFuture;
-@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.33.0.99:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.4:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface OmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
index ba9a45148..de19e469b 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
@@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
-@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.33.0.129:8014",configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "commonWlhyServiceFeign",url = "http://10.102.192.30:8014",value = ServiceNameConstants.WLHY_SERVICE,configuration = FeignAutoConfiguration.class)
public interface WlhyServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
index 7fbd7dd9b..26a92624c 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
@@ -21,7 +21,7 @@ import java.util.Map;
* @description: TODO
* @date 2024/5/10 8:58
**/
-@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.33.0.109:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.3:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface WmsServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
index beba5b1af..12571141a 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
@@ -9,7 +9,7 @@ import com.mhd.system.api.feign.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
-@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.33.0.99:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.4:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface YmsServiceFeign {
/**
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
index 9fd21ae67..6238639f6 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
@@ -26,7 +26,7 @@ import java.io.InputStream;
import java.util.List;
import java.util.Map;
-@FeignClient(value = "mhd-third-party-service",url = "http://10.33.0.129:8012",configuration = FeignAutoConfiguration.class)
+@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.30:8012", configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
index 376500b1c..ca93d3312 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
@@ -22,7 +22,7 @@ import java.util.Map;
/**
* 三方服务 Feign
*/
-@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.33.0.129:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.30:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/resources/bootstrap.yml b/mhd_oms/src/main/resources/bootstrap.yml
index 88471e390..ee058f0f6 100644
--- a/mhd_oms/src/main/resources/bootstrap.yml
+++ b/mhd_oms/src/main/resources/bootstrap.yml
@@ -18,15 +18,15 @@ spring:
discovery:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
- server-addr: 10.33.0.129:6010
-# server-addr: 10.102.192.30:6848
+# server-addr: 10.33.0.129:6010
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
config:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
- server-addr: 10.33.0.129:6010
-# server-addr: 10.102.192.30:6848
+# server-addr: 10.33.0.129:6010
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
diff --git a/mhd_wms/src/main/resources/bootstrap.yml b/mhd_wms/src/main/resources/bootstrap.yml
index 39eb710cb..ecb312261 100644
--- a/mhd_wms/src/main/resources/bootstrap.yml
+++ b/mhd_wms/src/main/resources/bootstrap.yml
@@ -14,18 +14,18 @@ spring:
nacos:
discovery:
# server-addr: 127.0.0.1:8848
- server-addr: 10.33.0.129:6010
+# server-addr: 10.33.0.129:6010
# 线上测试环境配置 容器名+端口号
-# server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
# server-addr: 10.102.192.105:6848
config:
# server-addr: 127.0.0.1:8848
- server-addr: 10.33.0.129:6010
+# server-addr: 10.33.0.129:
# 线上测试环境配置 容器名+端口号
-# server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From a549ac1507d33ff44e489b482e8b7a3746b41851 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Thu, 3 Sep 2026 18:32:25 +0800
Subject: [PATCH 75/87] =?UTF-8?q?=E5=8F=91=2031?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/com/mhd/system/api/BmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/OmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WlhyServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/YmsServiceFeign.java | 2 +-
.../com/mhd/common/core/feign/ThirdPartyServiceFeign.java | 2 +-
.../mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java | 2 +-
mhd_oms/src/main/resources/bootstrap.yml | 4 ++--
mhd_wms/src/main/resources/bootstrap.yml | 4 ++--
9 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
index e18484e8d..8cc8bfd57 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
@@ -18,7 +18,7 @@ import java.util.Set;
/**
* bms财务结算系统feign调用接口
*/
-@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.3:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.32:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface BmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
index e9418197a..4ef3bed80 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.concurrent.CompletableFuture;
-@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.4:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.33:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface OmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
index de19e469b..d976fcc98 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
@@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
-@FeignClient(contextId = "commonWlhyServiceFeign",url = "http://10.102.192.30:8014",value = ServiceNameConstants.WLHY_SERVICE,configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.102.192.31:8014",configuration = FeignAutoConfiguration.class)
public interface WlhyServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
index 26a92624c..1fe69a003 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
@@ -21,7 +21,7 @@ import java.util.Map;
* @description: TODO
* @date 2024/5/10 8:58
**/
-@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.3:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.32:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface WmsServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
index 12571141a..750ed853e 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
@@ -9,7 +9,7 @@ import com.mhd.system.api.feign.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
-@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.4:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.33:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface YmsServiceFeign {
/**
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
index 6238639f6..509644885 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
@@ -26,7 +26,7 @@ import java.io.InputStream;
import java.util.List;
import java.util.Map;
-@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.30:8012", configuration = FeignAutoConfiguration.class)
+@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.31:8012", configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
index ca93d3312..8c86ae1ad 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
@@ -22,7 +22,7 @@ import java.util.Map;
/**
* 三方服务 Feign
*/
-@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.30:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.31:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/resources/bootstrap.yml b/mhd_oms/src/main/resources/bootstrap.yml
index ee058f0f6..542b6bce7 100644
--- a/mhd_oms/src/main/resources/bootstrap.yml
+++ b/mhd_oms/src/main/resources/bootstrap.yml
@@ -19,14 +19,14 @@ spring:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
config:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
diff --git a/mhd_wms/src/main/resources/bootstrap.yml b/mhd_wms/src/main/resources/bootstrap.yml
index ecb312261..52ade270d 100644
--- a/mhd_wms/src/main/resources/bootstrap.yml
+++ b/mhd_wms/src/main/resources/bootstrap.yml
@@ -16,7 +16,7 @@ spring:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
# 线上测试环境配置 容器名+端口号
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
@@ -25,7 +25,7 @@ spring:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:
# 线上测试环境配置 容器名+端口号
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From 7d3c229b9a5920a1d13982963b0a3797d9bc0ba8 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Fri, 4 Sep 2026 10:47:29 +0800
Subject: [PATCH 76/87] =?UTF-8?q?feat(oms):=20=E6=96=B0=E5=A2=9E=E5=87=BA?=
=?UTF-8?q?=E4=BB=93=E5=A7=94=E6=89=98=E5=8D=95=EF=BC=8C=E6=94=AF=E6=8C=81?=
=?UTF-8?q?=E6=96=B0=E5=A2=9E/=E7=BC=96=E8=BE=91/=E5=AE=A1=E6=A0=B8/?=
=?UTF-8?q?=E4=B8=8B=E5=8F=91WMS/=E5=AE=8C=E6=88=90=E5=85=A5=E5=BA=93?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 订单状态五态:1待审核(新增默认,驳回单编辑后自动回此态) 2已审核(下发后保持,用下发状态区分) 3已驳回 4进行中(预留) 5已入库
- 下发走WMS出库通知单链路(stockOutOrInInsert),返回强校验防吞错;完成入库限已审核+已下发
- 订单类型未传默认普通出库;明细新增单价unitPrice;列表支持invoiceNo/settlementCurrency查询,时间参数只传年月日
- 必填:客户/业务员/仓库/商品名称/申报数量;编辑删除限待审核/已驳回且未下发
- 附达梦建表脚本oms_out_entrust_order(主表+明细表,最终版)
---
.../OutEntrustOrderApplicationService.java | 390 ++++++++++++++++++
.../oms/constant/OutEntrustOrderConstant.java | 37 ++
.../entity/OutEntrustOrder.java | 204 +++++++++
.../entity/OutEntrustOrderDetail.java | 98 +++++
.../facade/IOutEntrustOrderDetailService.java | 42 ++
.../facade/IOutEntrustOrderService.java | 62 +++
.../mapper/OutEntrustOrderDetailMapper.java | 14 +
.../mapper/OutEntrustOrderMapper.java | 28 ++
.../OutEntrustOrderDetailImpl.java | 97 +++++
.../persistence/OutEntrustOrderImpl.java | 159 +++++++
.../po/OutEntrustOrderDetailPO.java | 100 +++++
.../repository/po/OutEntrustOrderPO.java | 212 ++++++++++
.../repository/todo/OutEntrustOrderDO.java | 216 ++++++++++
.../todo/OutEntrustOrderDetailDO.java | 90 ++++
.../service/OutEntrustOrderDomainService.java | 177 ++++++++
.../OutEntrustOrderAssembler.java | 84 ++++
.../outEntrustOrder/OutEntrustOrderDTO.java | 198 +++++++++
.../OutEntrustOrderDetailDTO.java | 93 +++++
.../outEntrustOrder/OutEntrustOrderApi.java | 111 +++++
.../outEntrustOrder/OutEntrustOrderMapper.xml | 181 ++++++++
...te_table_dm_szwl_oms_out_entrust_order.sql | 230 +++++++++++
21 files changed, 2823 insertions(+)
create mode 100644 mhd_oms/src/main/java/com/mhd/oms/application/service/outEntrustOrder/OutEntrustOrderApplicationService.java
create mode 100644 mhd_oms/src/main/java/com/mhd/oms/constant/OutEntrustOrderConstant.java
create mode 100644 mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/entity/OutEntrustOrder.java
create mode 100644 mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/entity/OutEntrustOrderDetail.java
create mode 100644 mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/facade/IOutEntrustOrderDetailService.java
create mode 100644 mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/facade/IOutEntrustOrderService.java
create mode 100644 mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/mapper/OutEntrustOrderDetailMapper.java
create mode 100644 mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/mapper/OutEntrustOrderMapper.java
create mode 100644 mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/persistence/OutEntrustOrderDetailImpl.java
create mode 100644 mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/persistence/OutEntrustOrderImpl.java
create mode 100644 mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/po/OutEntrustOrderDetailPO.java
create mode 100644 mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/po/OutEntrustOrderPO.java
create mode 100644 mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/todo/OutEntrustOrderDO.java
create mode 100644 mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/todo/OutEntrustOrderDetailDO.java
create mode 100644 mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/service/OutEntrustOrderDomainService.java
create mode 100644 mhd_oms/src/main/java/com/mhd/oms/interfaces/assembler/outEntrustOrder/OutEntrustOrderAssembler.java
create mode 100644 mhd_oms/src/main/java/com/mhd/oms/interfaces/dto/outEntrustOrder/OutEntrustOrderDTO.java
create mode 100644 mhd_oms/src/main/java/com/mhd/oms/interfaces/dto/outEntrustOrder/OutEntrustOrderDetailDTO.java
create mode 100644 mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/outEntrustOrder/OutEntrustOrderApi.java
create mode 100644 mhd_oms/src/main/resources/mapper/outEntrustOrder/OutEntrustOrderMapper.xml
create mode 100644 sql/20260903_create_table_dm_szwl_oms_out_entrust_order.sql
diff --git a/mhd_oms/src/main/java/com/mhd/oms/application/service/outEntrustOrder/OutEntrustOrderApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/application/service/outEntrustOrder/OutEntrustOrderApplicationService.java
new file mode 100644
index 000000000..6dd2abf2e
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/application/service/outEntrustOrder/OutEntrustOrderApplicationService.java
@@ -0,0 +1,390 @@
+package com.mhd.oms.application.service.outEntrustOrder;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.json.JSONUtil;
+import com.mhd.common.core.exception.ServiceException;
+import com.mhd.common.core.web.domain.AjaxResult;
+import com.mhd.common.security.utils.SecurityUtils;
+import com.mhd.oms.constant.OutEntrustOrderConstant;
+import com.mhd.oms.domain.outEntrustOrder.repository.po.OutEntrustOrderDetailPO;
+import com.mhd.oms.domain.outEntrustOrder.repository.po.OutEntrustOrderPO;
+import com.mhd.oms.domain.outEntrustOrder.repository.todo.OutEntrustOrderDO;
+import com.mhd.oms.domain.outEntrustOrder.repository.todo.OutEntrustOrderDetailDO;
+import com.mhd.oms.domain.outEntrustOrder.service.OutEntrustOrderDomainService;
+import com.mhd.system.api.SystemServiceFeign;
+import com.mhd.system.api.WmsServiceFeign;
+import com.mhd.system.api.domain.NoticeMaterialDetailDTO;
+import com.mhd.system.api.domain.NoticeOrderDTO;
+import com.mhd.system.api.domain.WarehouseFeignPO;
+import com.mhd.system.api.model.LoginUser;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 出仓委托单ApplicationService
+ *
+ * @author rcx
+ * @date 2026-09-02
+ */
+@Service
+@Slf4j
+public class OutEntrustOrderApplicationService {
+
+ @Resource
+ private OutEntrustOrderDomainService outEntrustOrderDomainService;
+
+ @Resource
+ private SystemServiceFeign systemServiceFeign;
+
+ @Resource
+ private WmsServiceFeign wmsServiceFeign;
+
+ /**
+ * 分页查询出仓委托单列表(不做默认状态过滤,显示全部数据)
+ */
+ public List queryList(OutEntrustOrderDO outEntrustOrderDO) {
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser != null) {
+ Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
+ if (topOrganizationId != null && topOrganizationId != 1) {
+ outEntrustOrderDO.setTopOrganizationId(topOrganizationId);
+ }
+ }
+ //结束时间只传年月日(解析为当天00:00:00),归一为当天最后一秒,保证查询包含结束日当天
+ if (outEntrustOrderDO.getEndCreateTime() != null) {
+ outEntrustOrderDO.setEndCreateTime(DateUtil.endOfDay(outEntrustOrderDO.getEndCreateTime()));
+ }
+ List orderList = outEntrustOrderDomainService.queryList(outEntrustOrderDO);
+ fillInvoiceNo(orderList);
+ return orderList;
+ }
+
+ /**
+ * 列表回填发票号(明细发票号去重逗号拼接,供列表列展示)
+ */
+ private void fillInvoiceNo(List orderList) {
+ if (orderList == null || orderList.isEmpty()) {
+ return;
+ }
+ List entrustNumbers = orderList.stream()
+ .map(OutEntrustOrderPO::getEntrustNumber).collect(Collectors.toList());
+ Map invoiceNoMap = outEntrustOrderDomainService.getDetailByEntrustNumbers(entrustNumbers).stream()
+ .filter(detail -> detail.getInvoiceNo() != null && !detail.getInvoiceNo().trim().isEmpty())
+ .collect(Collectors.toMap(OutEntrustOrderDetailPO::getEntrustNumber, detail -> detail.getInvoiceNo().trim(),
+ (existing, replacement) -> existing.contains(replacement) ? existing
+ : existing + "," + replacement));
+ for (OutEntrustOrderPO order : orderList) {
+ order.setInvoiceNo(invoiceNoMap.get(order.getEntrustNumber()));
+ }
+ }
+
+ /**
+ * 新增出仓委托单(必填:客户、业务员、仓库、商品名称、申报数量)
+ */
+ public Boolean insert(OutEntrustOrderDO outEntrustOrderDO) {
+ //必填项校验
+ validateRequired(outEntrustOrderDO);
+ //订单类型未维护时默认普通出库(落库即生效,列表可见)
+ setDefaultOrderType(outEntrustOrderDO);
+ //仓库信息回填(校验仓库存在)
+ setWarehouseInfo(outEntrustOrderDO);
+ //组织信息填充
+ setOrganizationInfo(outEntrustOrderDO);
+ //汇总申报总数量
+ outEntrustOrderDO.setDeclareTotalQuantity(sumDeclareQuantity(outEntrustOrderDO.getMaterialDetailList()));
+ return outEntrustOrderDomainService.insert(outEntrustOrderDO);
+ }
+
+ /**
+ * 修改出仓委托单(仅待审核/已驳回且未下发可修改;已驳回单编辑后状态重置为待审核)
+ */
+ public Boolean update(OutEntrustOrderDO outEntrustOrderDO) {
+ //必填项校验
+ validateRequired(outEntrustOrderDO);
+ //状态类字段由审核/下发/完成入库接口推进,编辑不允许改动(置null后updateById跳过这些列,防前端误传/绕过审核改状态)
+ outEntrustOrderDO.setOrderStatus(null);
+ outEntrustOrderDO.setIssueStatus(null);
+ outEntrustOrderDO.setAuditRemark(null);
+ //订单类型未维护时默认普通出库(落库即生效,列表可见)
+ setDefaultOrderType(outEntrustOrderDO);
+ //仓库信息回填(校验仓库存在)
+ setWarehouseInfo(outEntrustOrderDO);
+ //明细全量替换时明细创建信息随主单更新人
+ if (outEntrustOrderDO.getCreateBy() == null) {
+ outEntrustOrderDO.setCreateBy(outEntrustOrderDO.getUpdateBy());
+ outEntrustOrderDO.setCreateByName(outEntrustOrderDO.getUpdateByName());
+ outEntrustOrderDO.setCreateTime(outEntrustOrderDO.getUpdateTime());
+ }
+ //汇总申报总数量
+ outEntrustOrderDO.setDeclareTotalQuantity(sumDeclareQuantity(outEntrustOrderDO.getMaterialDetailList()));
+ return outEntrustOrderDomainService.update(outEntrustOrderDO);
+ }
+
+ /**
+ * 订单类型未维护时默认普通出库(与下发兜底保持一致,保存即落库)
+ */
+ private void setDefaultOrderType(OutEntrustOrderDO outEntrustOrderDO) {
+ if (outEntrustOrderDO.getOrderTypeCode() == null || outEntrustOrderDO.getOrderTypeCode().trim().isEmpty()) {
+ outEntrustOrderDO.setOrderTypeCode(OutEntrustOrderConstant.WMS_ORDER_TYPE_CODE);
+ outEntrustOrderDO.setOrderTypeName(OutEntrustOrderConstant.WMS_ORDER_TYPE_NAME);
+ }
+ }
+
+ /**
+ * 获取出仓委托单详情(含明细)
+ */
+ public OutEntrustOrderPO getInfo(Long id) {
+ return outEntrustOrderDomainService.getInfo(id);
+ }
+
+ /**
+ * 批量删除出仓委托单(仅待审核/已驳回且未下发可删除)
+ */
+ public Boolean delete(Long[] ids) {
+ if (ids == null || ids.length == 0) {
+ throw new ServiceException("传递的ID值缺失或为空");
+ }
+ return outEntrustOrderDomainService.delete(ids);
+ }
+
+ /**
+ * 批量审核:待审核/已驳回 → 已审核(2)或已驳回(3)
+ *
+ * @param dto.idList 委托单ID集合
+ * @param dto.orderStatus 审核结果:2-审核通过 3-驳回
+ * @param dto.auditRemark 审核备注(驳回原因,选填)
+ */
+ public Boolean audit(OutEntrustOrderDO outEntrustOrderDO) {
+ List ids = outEntrustOrderDO.getIdList();
+ if (ids == null || ids.isEmpty()) {
+ throw new ServiceException("传递的ID值缺失或为空");
+ }
+ Integer targetStatus = outEntrustOrderDO.getOrderStatus();
+ if (!OutEntrustOrderConstant.ORDER_STATUS_AUDITED.equals(targetStatus)
+ && !OutEntrustOrderConstant.ORDER_STATUS_REJECTED.equals(targetStatus)) {
+ throw new ServiceException("审核结果参数错误,只能为已审核或已驳回");
+ }
+ //只有待审核/已驳回的委托单才可以审核
+ List orderList = outEntrustOrderDomainService.queryByIds(ids);
+ List unableAuditIds = orderList.stream()
+ .filter(order -> !OutEntrustOrderConstant.ORDER_STATUS_PENDING_AUDIT.equals(order.getOrderStatus())
+ && !OutEntrustOrderConstant.ORDER_STATUS_REJECTED.equals(order.getOrderStatus()))
+ .map(OutEntrustOrderPO::getId).collect(Collectors.toList());
+ if (!unableAuditIds.isEmpty()) {
+ throw new ServiceException("选中数据中存在进行中/已审核/已入库的委托单,只有待审核或已驳回的委托单方可审核");
+ }
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ Long auditBy = loginUser == null ? null : loginUser.getUserid();
+ String auditByName = loginUser == null ? null : loginUser.getUsername();
+ return outEntrustOrderDomainService.audit(ids, targetStatus, auditBy, auditByName, outEntrustOrderDO.getAuditRemark());
+ }
+
+ /**
+ * 批量下发:已审核的委托单下发到WMS(生成出库通知单),下发后订单状态保持已审核,仅置下发状态为已下发
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public Boolean issueOrder(List ids) {
+ if (ids == null || ids.isEmpty()) {
+ throw new ServiceException("传递的ID值缺失或为空");
+ }
+ //只有已审核且未下发的委托单才可以下发
+ List orderList = outEntrustOrderDomainService.queryByIds(ids);
+ for (OutEntrustOrderPO order : orderList) {
+ if (!OutEntrustOrderConstant.ORDER_STATUS_AUDITED.equals(order.getOrderStatus())) {
+ throw new ServiceException(String.format("委托单[%s]未审核,已审核的委托单方可下发", order.getEntrustNumber()));
+ }
+ if (!OutEntrustOrderConstant.ISSUE_STATUS_1.equals(order.getIssueStatus())) {
+ throw new ServiceException(String.format("委托单[%s]已下发,不允许重复下发", order.getEntrustNumber()));
+ }
+ }
+
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ Long issueBy = loginUser == null ? null : loginUser.getUserid();
+ String issueByName = loginUser == null ? null : loginUser.getUsername();
+ for (OutEntrustOrderPO order : orderList) {
+ //组装出库通知单
+ NoticeOrderDTO noticeOrderDTO = createNoticeOrderInfo(order);
+ //推送给WMS
+ AjaxResult ajaxResult = wmsServiceFeign.stockOutOrInInsert(noticeOrderDTO);
+ //WMS返回成功才允许置为已下发,避免下发失败被静默吞掉
+ if (ajaxResult == null || !"200".equals(String.valueOf(ajaxResult.get("code")))) {
+ String errorMsg = ajaxResult == null ? "WMS服务调用失败" : String.valueOf(ajaxResult.get("msg"));
+ log.error("出仓委托单[{}]下发WMS失败:{}", order.getEntrustNumber(), errorMsg);
+ throw new ServiceException(String.format("委托单[%s]下发WMS失败:%s", order.getEntrustNumber(), errorMsg));
+ }
+ log.info("出仓委托单[{}]下发WMS成功", order.getEntrustNumber());
+ }
+ return outEntrustOrderDomainService.issue(ids, issueBy, issueByName);
+ }
+
+ /**
+ * 批量完成:已审核(已下发) → 已入库(OMS人工推进,WMS出库完成后由人工确认)
+ */
+ public Boolean finish(List ids) {
+ if (ids == null || ids.isEmpty()) {
+ throw new ServiceException("传递的ID值缺失或为空");
+ }
+ //只有已审核且已下发的委托单才可以置为已入库(兼容存量:旧版本曾自动置为进行中的也允许)
+ List orderList = outEntrustOrderDomainService.queryByIds(ids);
+ List unableFinishIds = orderList.stream()
+ .filter(order -> !(OutEntrustOrderConstant.ORDER_STATUS_IN_PROGRESS.equals(order.getOrderStatus())
+ || (OutEntrustOrderConstant.ORDER_STATUS_AUDITED.equals(order.getOrderStatus())
+ && OutEntrustOrderConstant.ISSUE_STATUS_2.equals(order.getIssueStatus()))))
+ .map(OutEntrustOrderPO::getId).collect(Collectors.toList());
+ if (!unableFinishIds.isEmpty()) {
+ throw new ServiceException("选中数据中存在待审核/已驳回或未下发的委托单,只有已审核且已下发的委托单方可置为已入库");
+ }
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ Long updateBy = loginUser == null ? null : loginUser.getUserid();
+ String updateByName = loginUser == null ? null : loginUser.getUsername();
+ return outEntrustOrderDomainService.finish(ids, updateBy, updateByName);
+ }
+
+ /**
+ * 组装出库通知单信息(客户=货主)
+ */
+ private NoticeOrderDTO createNoticeOrderInfo(OutEntrustOrderPO order) {
+ NoticeOrderDTO noticeOrderDTO = new NoticeOrderDTO();
+ noticeOrderDTO.setType(OutEntrustOrderConstant.NOTICE_TYPE_OUT);
+ //客户订单号记录委托单号,便于WMS侧追溯
+ noticeOrderDTO.setCustomerOrderNumber(order.getEntrustNumber());
+ noticeOrderDTO.setWarehouseId(order.getWarehouseId());
+ //出仓委托单的客户即WMS货主,货主为物料档案/库存作业的归属
+ noticeOrderDTO.setShipperId(order.getShipperId());
+ noticeOrderDTO.setShipperName(order.getShipperName());
+ noticeOrderDTO.setCustomerId(order.getShipperId());
+ noticeOrderDTO.setCustomerName(order.getShipperName());
+ //订单类型:未维护时默认普通出库(WMS侧按出库单据类型字典翻译)
+ noticeOrderDTO.setOrderTypeCode(order.getOrderTypeCode() == null
+ ? OutEntrustOrderConstant.WMS_ORDER_TYPE_CODE : order.getOrderTypeCode());
+ noticeOrderDTO.setOrderTypeName(order.getOrderTypeName());
+ noticeOrderDTO.setExpectTime(order.getExpectTime() == null ? new Date() : order.getExpectTime());
+ noticeOrderDTO.setNullify(2);
+ //出库通知单仅有限几个业务字段:业务员及委托/报关关键信息拼入备注留存(超长截断)
+ noticeOrderDTO.setRemark(buildNoticeRemark(order));
+ //物料明细:申报数量作为通知单计划数量
+ List detailList = outEntrustOrderDomainService.getDetailByEntrustNumber(order.getEntrustNumber());
+ if (detailList == null || detailList.isEmpty()) {
+ throw new ServiceException(String.format("委托单[%s]缺少商品明细,无法下发", order.getEntrustNumber()));
+ }
+ List materialDetailList = new ArrayList<>();
+ for (OutEntrustOrderDetailPO detail : detailList) {
+ NoticeMaterialDetailDTO materialDetail = new NoticeMaterialDetailDTO();
+ materialDetail.setMaterialBaseInfoId(detail.getMaterialBaseInfoId());
+ materialDetail.setMaterialCode(detail.getMaterialCode());
+ //物料名称:档案名优先,无档案时用委托单品名
+ materialDetail.setMaterialName(detail.getMaterialName() != null && !detail.getMaterialName().trim().isEmpty()
+ ? detail.getMaterialName() : detail.getCommodityName());
+ materialDetail.setBarCode(detail.getBarCode());
+ materialDetail.setQuantity(detail.getDeclareQuantity());
+ materialDetailList.add(materialDetail);
+ }
+ noticeOrderDTO.setMaterialDetailList(materialDetailList);
+ return noticeOrderDTO;
+ }
+
+ /**
+ * 出库通知单备注:拼入业务员及委托/报关关键信息(通知单无对应字段)
+ */
+ private String buildNoticeRemark(OutEntrustOrderPO order) {
+ StringBuilder remark = new StringBuilder();
+ if (order.getRemark() != null && !order.getRemark().trim().isEmpty()) {
+ remark.append(order.getRemark().trim());
+ }
+ appendIfPresent(remark, "业务员", order.getSalesmanName());
+ appendIfPresent(remark, "委托编号", order.getEntrustNo());
+ appendIfPresent(remark, "柜号", order.getContainerNo());
+ appendIfPresent(remark, "承运商", order.getCarrierName() != null ? order.getCarrierName() : order.getCarrier());
+ appendIfPresent(remark, "To", order.getToReceiver());
+ appendIfPresent(remark, "联系人", order.getContactPerson());
+ appendIfPresent(remark, "电话", order.getTel());
+ appendIfPresent(remark, "申报地关区", order.getDeclareCustoms());
+ appendIfPresent(remark, "进出境关别", order.getEntryExitCustoms());
+ //备注列长度保护
+ return remark.length() > 480 ? remark.substring(0, 480) : remark.toString();
+ }
+
+ private void appendIfPresent(StringBuilder remark, String label, String value) {
+ if (value != null && !value.trim().isEmpty()) {
+ remark.append(remark.length() > 0 ? ";" : "").append(label).append(":").append(value.trim());
+ }
+ }
+
+ /**
+ * 必填项校验:客户、业务员、仓库、商品名称、申报数量,其余字段不强制
+ */
+ private void validateRequired(OutEntrustOrderDO outEntrustOrderDO) {
+ if (outEntrustOrderDO.getShipperId() == null) {
+ throw new ServiceException("客户不能为空");
+ }
+ if (outEntrustOrderDO.getSalesmanId() == null || outEntrustOrderDO.getSalesmanId().trim().isEmpty()) {
+ throw new ServiceException("业务员不能为空");
+ }
+ if (outEntrustOrderDO.getWarehouseId() == null) {
+ throw new ServiceException("仓库不能为空");
+ }
+ if (outEntrustOrderDO.getMaterialDetailList() == null || outEntrustOrderDO.getMaterialDetailList().isEmpty()) {
+ throw new ServiceException("商品明细不能为空");
+ }
+ int index = 1;
+ for (OutEntrustOrderDetailDO detail : outEntrustOrderDO.getMaterialDetailList()) {
+ //商品名称:物料档案名/委托单品名至少其一
+ boolean nameBlank = (detail.getMaterialName() == null || detail.getMaterialName().trim().isEmpty())
+ && (detail.getCommodityName() == null || detail.getCommodityName().trim().isEmpty());
+ if (nameBlank) {
+ throw new ServiceException(String.format("商品明细第%d行商品名称不能为空", index));
+ }
+ if (detail.getDeclareQuantity() == null || detail.getDeclareQuantity().compareTo(BigDecimal.ZERO) <= 0) {
+ throw new ServiceException(String.format("商品明细第%d行申报数量必须大于0", index));
+ }
+ index++;
+ }
+ }
+
+ /**
+ * 仓库信息校验并回填编码/名称
+ */
+ private void setWarehouseInfo(OutEntrustOrderDO outEntrustOrderDO) {
+ AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(outEntrustOrderDO.getWarehouseId());
+ if (ajaxResult == null || !"200".equals(String.valueOf(ajaxResult.get("code")))) {
+ throw new ServiceException("获取仓库信息失败,请检查仓库是否有效");
+ }
+ WarehouseFeignPO warehouseFeignPO = JSONUtil.toBean(JSONUtil.toJsonStr(ajaxResult.get("data")), WarehouseFeignPO.class);
+ if (warehouseFeignPO == null || Objects.isNull(warehouseFeignPO.getWarehouseId())) {
+ throw new ServiceException("仓库不存在,请重新选择");
+ }
+ outEntrustOrderDO.setWarehouseCode(warehouseFeignPO.getWarehouseCode());
+ outEntrustOrderDO.setWarehouseName(warehouseFeignPO.getWarehouseName());
+ }
+
+ /**
+ * 组织信息填充
+ */
+ private void setOrganizationInfo(OutEntrustOrderDO outEntrustOrderDO) {
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ outEntrustOrderDO.setOrganizationId(loginUser.getUserPo().getOrganizationId());
+ outEntrustOrderDO.setOrganizationName(loginUser.getUserPo().getOrganizationName());
+ outEntrustOrderDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
+ }
+ }
+
+ /**
+ * 汇总明细申报数量
+ */
+ private BigDecimal sumDeclareQuantity(List detailList) {
+ return detailList.stream()
+ .map(OutEntrustOrderDetailDO::getDeclareQuantity)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/constant/OutEntrustOrderConstant.java b/mhd_oms/src/main/java/com/mhd/oms/constant/OutEntrustOrderConstant.java
new file mode 100644
index 000000000..341990c34
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/constant/OutEntrustOrderConstant.java
@@ -0,0 +1,37 @@
+package com.mhd.oms.constant;
+
+/**
+ * 出仓委托单常量
+ *
+ * @author rcx
+ * @date 2026-09-02
+ */
+public interface OutEntrustOrderConstant {
+
+ /** 出仓委托单号前缀 */
+ String OUT_ENTRUST_NO_PREFIX = "CKWT";
+
+ /** 订单状态:1-待审核(新增默认值;已驳回单重新编辑后也回到此状态) */
+ Integer ORDER_STATUS_PENDING_AUDIT = 1;
+ /** 订单状态:2-已审核 */
+ Integer ORDER_STATUS_AUDITED = 2;
+ /** 订单状态:3-已驳回 */
+ Integer ORDER_STATUS_REJECTED = 3;
+ /** 订单状态:4-进行中(已下发WMS) */
+ Integer ORDER_STATUS_IN_PROGRESS = 4;
+ /** 订单状态:5-已入库 */
+ Integer ORDER_STATUS_STORED = 5;
+
+ /** 下发状态:1-未下发 */
+ Integer ISSUE_STATUS_1 = 1;
+ /** 下发状态:2-已下发 */
+ Integer ISSUE_STATUS_2 = 2;
+
+ /** 下发WMS出库通知单-订单类型编码 */
+ String WMS_ORDER_TYPE_CODE = "pu_tong_chu_ku";
+ /** 下发WMS出库通知单-订单类型名称 */
+ String WMS_ORDER_TYPE_NAME = "普通出库";
+
+ /** 出库通知单类型(NoticeOrderDTO.type:1-入库通知单 2-出库通知单) */
+ Integer NOTICE_TYPE_OUT = 2;
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/entity/OutEntrustOrder.java b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/entity/OutEntrustOrder.java
new file mode 100644
index 000000000..c8aae9112
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/entity/OutEntrustOrder.java
@@ -0,0 +1,204 @@
+package com.mhd.oms.domain.outEntrustOrder.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.mhd.common.core.web.domain.BaseVOEntity;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 出仓委托单对象 oms_out_entrust_order
+ * 表单字段对齐WMS出库管理新增(报关/委托信息块)
+ *
+ * @author rcx
+ * @date 2026-09-02
+ */
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@TableName("oms_out_entrust_order")
+public class OutEntrustOrder extends BaseVOEntity {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("编号")
+ @TableId(type = IdType.AUTO)
+ private Long id;
+
+ @ApiModelProperty("委托单号")
+ private String entrustNumber;
+
+ @ApiModelProperty("出库仓库ID")
+ private Long warehouseId;
+ @ApiModelProperty("仓库编码")
+ private String warehouseCode;
+ @ApiModelProperty("仓库名称")
+ private String warehouseName;
+
+ @ApiModelProperty("客户ID(货主)")
+ private Long shipperId;
+ @ApiModelProperty("客户编码")
+ private String shipperCode;
+ @ApiModelProperty("客户名称")
+ private String shipperName;
+
+ @ApiModelProperty("业务员ID")
+ private String salesmanId;
+ @ApiModelProperty("业务员名称")
+ private String salesmanName;
+
+ @ApiModelProperty("订单类型编码(字典outDocumentType)")
+ private String orderTypeCode;
+ @ApiModelProperty("订单类型名称")
+ private String orderTypeName;
+
+ @ApiModelProperty("结算币种")
+ private String settlementCurrency;
+
+ @ApiModelProperty("优先级别编码")
+ private String priorityLevelCode;
+ @ApiModelProperty("优先级别名称")
+ private String priorityLevelName;
+
+ @ApiModelProperty("是否直接出库: 1-是 2-否")
+ private Integer directWarehouse;
+
+ @ApiModelProperty("是否复核: 1-是 2-否")
+ private Integer review;
+
+ @ApiModelProperty("预计出货时间")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date expectTime;
+
+ @ApiModelProperty("出仓日期")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date outboundDate;
+
+ @ApiModelProperty("orderDate")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date orderDate;
+
+ @ApiModelProperty("完成时间")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date completeTime;
+
+ @ApiModelProperty("To(收货人)")
+ @TableField("to_receiver")
+ private String toReceiver;
+
+ @ApiModelProperty("联系人")
+ private String contactPerson;
+
+ @ApiModelProperty("车型及车牌")
+ private String vehicleModelPlate;
+
+ @ApiModelProperty("委托编号(客户委托单号)")
+ private String entrustNo;
+
+ @ApiModelProperty("Tel电话")
+ private String tel;
+
+ @ApiModelProperty("Fax传真")
+ private String fax;
+
+ @ApiModelProperty("司机签名")
+ private String driverSign;
+
+ @ApiModelProperty("承运商编码")
+ private String carrier;
+ @ApiModelProperty("承运商名称")
+ private String carrierName;
+
+ @ApiModelProperty("柜号")
+ private String containerNo;
+ @ApiModelProperty("柜")
+ private String containerNoName;
+
+ @ApiModelProperty("运输方式编码")
+ private String transportModeCode;
+ @ApiModelProperty("运输方式名称")
+ private String transportModeName;
+
+ @ApiModelProperty("监管方式编码")
+ private String supervisionModeCode;
+ @ApiModelProperty("监管方式名称")
+ private String supervisionModeName;
+
+ @ApiModelProperty("申报地关区")
+ private String declareCustoms;
+
+ @ApiModelProperty("进出境关别")
+ private String entryExitCustoms;
+
+ @ApiModelProperty("起运/运抵国(地区)")
+ private String departureArrivalCountry;
+
+ @ApiModelProperty("海关是否查验货物")
+ private String customsInspectionFlag;
+
+ @ApiModelProperty("是否需要报关(预留,页面隐藏)")
+ private String needDeclareFlag;
+ @ApiModelProperty("是否需要运输(预留,页面隐藏)")
+ private String needTransportFlag;
+
+ @ApiModelProperty("生产商")
+ private String manufacturer;
+
+ @ApiModelProperty("报关员姓名及联系方式")
+ private String customsDeclarerInfo;
+
+ @ApiModelProperty("送货地址")
+ private String deliveryAddr;
+
+ @ApiModelProperty("附件url")
+ private String annexUrl;
+
+ @ApiModelProperty("订单状态:1-待审核 2-已审核 3-已驳回 4-进行中 5-已入库")
+ private Integer orderStatus;
+
+ @ApiModelProperty("审核人ID")
+ private Long auditBy;
+ @ApiModelProperty("审核人姓名")
+ private String auditByName;
+ @ApiModelProperty("审核时间")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date auditTime;
+ @ApiModelProperty("审核备注(驳回原因)")
+ private String auditRemark;
+
+ @ApiModelProperty("下发状态:1-未下发 2-已下发")
+ private Integer issueStatus;
+ @ApiModelProperty("下发人ID")
+ private Long issueBy;
+ @ApiModelProperty("下发人姓名")
+ private String issueByName;
+ @ApiModelProperty("下发时间")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date issueTime;
+
+ @ApiModelProperty("申报总数量(明细申报数量之和)")
+ private BigDecimal declareTotalQuantity;
+
+ @ApiModelProperty("备注")
+ private String remark;
+
+ @ApiModelProperty("组织ID")
+ private Long organizationId;
+ @ApiModelProperty("组织名称")
+ private String organizationName;
+ @ApiModelProperty("一级组织ID")
+ private Long topOrganizationId;
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/entity/OutEntrustOrderDetail.java b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/entity/OutEntrustOrderDetail.java
new file mode 100644
index 000000000..3231fdc7e
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/entity/OutEntrustOrderDetail.java
@@ -0,0 +1,98 @@
+package com.mhd.oms.domain.outEntrustOrder.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.mhd.common.core.web.domain.BaseVOEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+
+/**
+ * 出仓委托单明细对象 oms_out_entrust_order_detail
+ * 明细列对齐WMS出库管理新增(出仓委托单明细列)
+ *
+ * @author rcx
+ * @date 2026-09-02
+ */
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@TableName("oms_out_entrust_order_detail")
+public class OutEntrustOrderDetail extends BaseVOEntity {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("编号")
+ @TableId(type = IdType.AUTO)
+ private Long id;
+
+ @ApiModelProperty("委托单号(关联主表)")
+ private String entrustNumber;
+
+ @ApiModelProperty("物料基础信息ID")
+ private Long materialBaseInfoId;
+ @ApiModelProperty("商品编码")
+ private String materialCode;
+ @ApiModelProperty("商品名称(物料档案名)")
+ private String materialName;
+ @ApiModelProperty("商品条形码")
+ private String barCode;
+
+ @ApiModelProperty("商品名称(委托单品名)")
+ private String commodityName;
+ @ApiModelProperty("商品编号")
+ private String commodityNo;
+ @ApiModelProperty("料号")
+ private String materialNo;
+ @ApiModelProperty("规格型号")
+ private String specificationModel;
+ @ApiModelProperty("SKU码")
+ private String skucode;
+ @ApiModelProperty("发票号")
+ private String invoiceNo;
+
+ @ApiModelProperty("申报单位")
+ private String declareUnit;
+ @ApiModelProperty("申报数量")
+ private BigDecimal declareQuantity;
+ @ApiModelProperty("单价")
+ private BigDecimal unitPrice;
+
+ @ApiModelProperty("单位")
+ private String unit;
+ @ApiModelProperty("升")
+ private String liter;
+ @ApiModelProperty("尺寸")
+ private String size;
+ @ApiModelProperty("箱数")
+ private BigDecimal caseCount;
+ @ApiModelProperty("件数")
+ private BigDecimal pieceCount;
+ @ApiModelProperty("出库数量")
+ private BigDecimal outboundQuantity;
+ @ApiModelProperty("总净重(千克)")
+ private BigDecimal totalNetWeight;
+ @ApiModelProperty("总毛重(千克)")
+ private BigDecimal totalGrossWeight;
+ @ApiModelProperty("总体积(立方米)")
+ private BigDecimal totalVolume;
+ @ApiModelProperty("总面积")
+ private BigDecimal totalArea;
+ @ApiModelProperty("总金额")
+ private BigDecimal totalAmount;
+ @ApiModelProperty("币制")
+ private String currency;
+ @ApiModelProperty("批次")
+ private String batchRefNo;
+ @ApiModelProperty("单据参考号")
+ private String sheetRefNo;
+ @ApiModelProperty("原产国")
+ private String countryOfOrigin;
+ @ApiModelProperty("箱/托盘号")
+ private String boxPalletNo;
+
+ @ApiModelProperty("备注")
+ private String remark;
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/facade/IOutEntrustOrderDetailService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/facade/IOutEntrustOrderDetailService.java
new file mode 100644
index 000000000..52c31a897
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/facade/IOutEntrustOrderDetailService.java
@@ -0,0 +1,42 @@
+package com.mhd.oms.domain.outEntrustOrder.repository.facade;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mhd.oms.domain.outEntrustOrder.entity.OutEntrustOrderDetail;
+import com.mhd.oms.domain.outEntrustOrder.repository.po.OutEntrustOrderDetailPO;
+import com.mhd.oms.domain.outEntrustOrder.repository.todo.OutEntrustOrderDetailDO;
+
+import java.util.List;
+
+/**
+ * 出仓委托单明细Service接口
+ *
+ * @author rcx
+ * @date 2026-09-02
+ */
+public interface IOutEntrustOrderDetailService extends IService {
+
+ /**
+ * 根据委托单号查询有效明细
+ */
+ List queryByEntrustNumber(String entrustNumber);
+
+ /**
+ * 根据委托单号集合查询有效明细
+ */
+ List queryByEntrustNumbers(List entrustNumbers);
+
+ /**
+ * 批量保存明细
+ */
+ Boolean batchInsert(String entrustNumber, List detailDOList);
+
+ /**
+ * 根据委托单号逻辑删除明细
+ */
+ Boolean deleteByEntrustNumber(String entrustNumber);
+
+ /**
+ * 根据委托单号集合逻辑删除明细
+ */
+ Boolean deleteByEntrustNumbers(List entrustNumbers);
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/facade/IOutEntrustOrderService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/facade/IOutEntrustOrderService.java
new file mode 100644
index 000000000..86e3588b6
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/facade/IOutEntrustOrderService.java
@@ -0,0 +1,62 @@
+package com.mhd.oms.domain.outEntrustOrder.repository.facade;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mhd.oms.domain.outEntrustOrder.entity.OutEntrustOrder;
+import com.mhd.oms.domain.outEntrustOrder.repository.po.OutEntrustOrderPO;
+import com.mhd.oms.domain.outEntrustOrder.repository.todo.OutEntrustOrderDO;
+
+import java.util.List;
+
+/**
+ * 出仓委托单Service接口
+ *
+ * @author rcx
+ * @date 2026-09-02
+ */
+public interface IOutEntrustOrderService extends IService {
+
+ /**
+ * 分页查询出仓委托单列表
+ */
+ List queryList(OutEntrustOrderDO outEntrustOrderDO);
+
+ /**
+ * 新增出仓委托单
+ */
+ Boolean insert(OutEntrustOrderDO outEntrustOrderDO);
+
+ /**
+ * 修改出仓委托单
+ */
+ Boolean update(OutEntrustOrderDO outEntrustOrderDO);
+
+ /**
+ * 批量删除出仓委托单
+ */
+ Boolean delete(Long[] ids);
+
+ /**
+ * 获取出仓委托单详情(含明细)
+ */
+ OutEntrustOrderPO getInfo(Long id);
+
+ /**
+ * 根据编号集合查询出仓委托单列表
+ */
+ List getInfoByIds(List ids);
+
+ /**
+ * 审核:待审核/已驳回 → 已审核(2)或已驳回(3)
+ */
+ Boolean audit(List ids, Integer targetStatus, Long auditBy, String auditByName, String auditRemark);
+
+ /**
+ * 下发:置为已下发,订单状态置为进行中
+ */
+ Boolean issue(List ids, Long issueBy, String issueByName);
+
+ /**
+ * 完成:进行中 → 已入库
+ */
+ Boolean finish(List ids, Long updateBy, String updateByName);
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/mapper/OutEntrustOrderDetailMapper.java b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/mapper/OutEntrustOrderDetailMapper.java
new file mode 100644
index 000000000..a5ec639aa
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/mapper/OutEntrustOrderDetailMapper.java
@@ -0,0 +1,14 @@
+package com.mhd.oms.domain.outEntrustOrder.repository.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mhd.oms.domain.outEntrustOrder.entity.OutEntrustOrderDetail;
+
+/**
+ * 出仓委托单明细Mapper接口
+ *
+ * @author rcx
+ * @date 2026-09-02
+ */
+public interface OutEntrustOrderDetailMapper extends BaseMapper {
+
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/mapper/OutEntrustOrderMapper.java b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/mapper/OutEntrustOrderMapper.java
new file mode 100644
index 000000000..fcf8d0e61
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/mapper/OutEntrustOrderMapper.java
@@ -0,0 +1,28 @@
+package com.mhd.oms.domain.outEntrustOrder.repository.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mhd.oms.domain.outEntrustOrder.entity.OutEntrustOrder;
+import com.mhd.oms.domain.outEntrustOrder.repository.po.OutEntrustOrderPO;
+import com.mhd.oms.domain.outEntrustOrder.repository.todo.OutEntrustOrderDO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 出仓委托单Mapper接口
+ *
+ * @author rcx
+ * @date 2026-09-02
+ */
+public interface OutEntrustOrderMapper extends BaseMapper {
+
+ /**
+ * 查询出仓委托单列表
+ */
+ List queryList(OutEntrustOrderDO outEntrustOrderDO);
+
+ /**
+ * 根据编号集合查询出仓委托单列表
+ */
+ List getInfoByIds(@Param("idList") List idList);
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/persistence/OutEntrustOrderDetailImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/persistence/OutEntrustOrderDetailImpl.java
new file mode 100644
index 000000000..d2654e956
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/persistence/OutEntrustOrderDetailImpl.java
@@ -0,0 +1,97 @@
+package com.mhd.oms.domain.outEntrustOrder.repository.persistence;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mhd.oms.domain.outEntrustOrder.entity.OutEntrustOrderDetail;
+import com.mhd.oms.domain.outEntrustOrder.repository.facade.IOutEntrustOrderDetailService;
+import com.mhd.oms.domain.outEntrustOrder.repository.mapper.OutEntrustOrderDetailMapper;
+import com.mhd.oms.domain.outEntrustOrder.repository.po.OutEntrustOrderDetailPO;
+import com.mhd.oms.domain.outEntrustOrder.repository.todo.OutEntrustOrderDetailDO;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 出仓委托单明细Service业务层处理
+ *
+ * @author rcx
+ * @date 2026-09-02
+ */
+@Service
+public class OutEntrustOrderDetailImpl extends ServiceImpl implements IOutEntrustOrderDetailService {
+
+ /**
+ * 根据委托单号查询有效明细
+ */
+ @Override
+ public List queryByEntrustNumber(String entrustNumber) {
+ List detailList = this.list(new LambdaQueryWrapper()
+ .eq(OutEntrustOrderDetail::getEntrustNumber, entrustNumber)
+ .eq(OutEntrustOrderDetail::getDelFlag, 1)
+ .orderByAsc(OutEntrustOrderDetail::getId));
+ return detailList.stream().map(detail -> {
+ OutEntrustOrderDetailPO detailPO = new OutEntrustOrderDetailPO();
+ BeanUtils.copyProperties(detail, detailPO);
+ return detailPO;
+ }).collect(Collectors.toList());
+ }
+
+ /**
+ * 根据委托单号集合查询有效明细
+ */
+ @Override
+ public List queryByEntrustNumbers(List entrustNumbers) {
+ if (entrustNumbers == null || entrustNumbers.isEmpty()) {
+ return new java.util.ArrayList<>();
+ }
+ List detailList = this.list(new LambdaQueryWrapper()
+ .in(OutEntrustOrderDetail::getEntrustNumber, entrustNumbers)
+ .eq(OutEntrustOrderDetail::getDelFlag, 1)
+ .orderByAsc(OutEntrustOrderDetail::getId));
+ return detailList.stream().map(detail -> {
+ OutEntrustOrderDetailPO detailPO = new OutEntrustOrderDetailPO();
+ BeanUtils.copyProperties(detail, detailPO);
+ return detailPO;
+ }).collect(Collectors.toList());
+ }
+
+ /**
+ * 批量保存明细
+ */
+ @Override
+ public Boolean batchInsert(String entrustNumber, List detailDOList) {
+ List detailList = detailDOList.stream().map(detailDO -> {
+ OutEntrustOrderDetail detail = new OutEntrustOrderDetail();
+ BeanUtils.copyProperties(detailDO, detail);
+ detail.setEntrustNumber(entrustNumber);
+ detail.setDelFlag(1);
+ return detail;
+ }).collect(Collectors.toList());
+ return this.saveBatch(detailList);
+ }
+
+ /**
+ * 根据委托单号逻辑删除明细
+ */
+ @Override
+ public Boolean deleteByEntrustNumber(String entrustNumber) {
+ return this.update(new LambdaUpdateWrapper()
+ .eq(OutEntrustOrderDetail::getEntrustNumber, entrustNumber)
+ .eq(OutEntrustOrderDetail::getDelFlag, 1)
+ .set(OutEntrustOrderDetail::getDelFlag, 2));
+ }
+
+ /**
+ * 根据委托单号集合逻辑删除明细
+ */
+ @Override
+ public Boolean deleteByEntrustNumbers(List entrustNumbers) {
+ return this.update(new LambdaUpdateWrapper()
+ .in(OutEntrustOrderDetail::getEntrustNumber, entrustNumbers)
+ .eq(OutEntrustOrderDetail::getDelFlag, 1)
+ .set(OutEntrustOrderDetail::getDelFlag, 2));
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/persistence/OutEntrustOrderImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/persistence/OutEntrustOrderImpl.java
new file mode 100644
index 000000000..c7ccd494c
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/persistence/OutEntrustOrderImpl.java
@@ -0,0 +1,159 @@
+package com.mhd.oms.domain.outEntrustOrder.repository.persistence;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mhd.common.core.exception.ServiceException;
+import com.mhd.common.security.utils.SecurityUtils;
+import com.mhd.oms.constant.OutEntrustOrderConstant;
+import com.mhd.oms.domain.outEntrustOrder.entity.OutEntrustOrder;
+import com.mhd.oms.domain.outEntrustOrder.repository.facade.IOutEntrustOrderService;
+import com.mhd.oms.domain.outEntrustOrder.repository.mapper.OutEntrustOrderMapper;
+import com.mhd.oms.domain.outEntrustOrder.repository.po.OutEntrustOrderPO;
+import com.mhd.oms.domain.outEntrustOrder.repository.todo.OutEntrustOrderDO;
+import com.mhd.system.api.model.LoginUser;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 出仓委托单Service业务层处理
+ *
+ * @author rcx
+ * @date 2026-09-02
+ */
+@Service
+public class OutEntrustOrderImpl extends ServiceImpl implements IOutEntrustOrderService {
+
+ /**
+ * 查询出仓委托单列表
+ */
+ @Override
+ public List queryList(OutEntrustOrderDO outEntrustOrderDO) {
+ return baseMapper.queryList(outEntrustOrderDO);
+ }
+
+ /**
+ * 新增出仓委托单
+ */
+ @Override
+ public Boolean insert(OutEntrustOrderDO outEntrustOrderDO) {
+ OutEntrustOrder outEntrustOrder = new OutEntrustOrder();
+ BeanUtils.copyProperties(outEntrustOrderDO, outEntrustOrder);
+ return this.save(outEntrustOrder);
+ }
+
+ /**
+ * 修改出仓委托单
+ */
+ @Override
+ public Boolean update(OutEntrustOrderDO outEntrustOrderDO) {
+ OutEntrustOrder outEntrustOrder = new OutEntrustOrder();
+ BeanUtils.copyProperties(outEntrustOrderDO, outEntrustOrder);
+ return this.updateById(outEntrustOrder);
+ }
+
+ /**
+ * 批量删除出仓委托单(仅待审核/已驳回且未下发可删除)
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Boolean delete(Long[] ids) {
+ List outEntrustOrders = this.listByIds(Arrays.asList(ids));
+ //只有待审核/已驳回且未下发的委托单才可以删除
+ List unableDeleteList = outEntrustOrders.stream()
+ .filter(order -> !(OutEntrustOrderConstant.ORDER_STATUS_PENDING_AUDIT.equals(order.getOrderStatus())
+ || OutEntrustOrderConstant.ORDER_STATUS_REJECTED.equals(order.getOrderStatus()))
+ || !OutEntrustOrderConstant.ISSUE_STATUS_1.equals(order.getIssueStatus()))
+ .collect(Collectors.toList());
+ if (!unableDeleteList.isEmpty()) {
+ throw new ServiceException("已审核/进行中/已入库或已下发的委托单不允许删除");
+ }
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ Date now = new Date();
+ for (OutEntrustOrder outEntrustOrder : outEntrustOrders) {
+ outEntrustOrder.setDelFlag(2);
+ outEntrustOrder.setUpdateBy(loginUser == null ? null : loginUser.getUserid());
+ outEntrustOrder.setUpdateByName(loginUser == null ? null : loginUser.getUsername());
+ outEntrustOrder.setUpdateTime(now);
+ }
+ return this.updateBatchById(outEntrustOrders);
+ }
+
+ /**
+ * 获取出仓委托单详情
+ */
+ @Override
+ public OutEntrustOrderPO getInfo(Long id) {
+ OutEntrustOrder outEntrustOrder = this.getOne(new LambdaQueryWrapper()
+ .eq(OutEntrustOrder::getId, id).eq(OutEntrustOrder::getDelFlag, 1));
+ if (outEntrustOrder == null) {
+ throw new ServiceException("出仓委托单不存在");
+ }
+ OutEntrustOrderPO outEntrustOrderPO = new OutEntrustOrderPO();
+ BeanUtils.copyProperties(outEntrustOrder, outEntrustOrderPO);
+ return outEntrustOrderPO;
+ }
+
+ /**
+ * 根据编号集合查询出仓委托单列表
+ */
+ @Override
+ public List getInfoByIds(List ids) {
+ return baseMapper.getInfoByIds(ids);
+ }
+
+ /**
+ * 审核:待审核/已驳回 → 已审核(2)或已驳回(3)
+ */
+ @Override
+ public Boolean audit(List ids, Integer targetStatus, Long auditBy, String auditByName, String auditRemark) {
+ return this.update(new LambdaUpdateWrapper()
+ .in(OutEntrustOrder::getId, ids)
+ .eq(OutEntrustOrder::getDelFlag, 1)
+ .set(OutEntrustOrder::getOrderStatus, targetStatus)
+ .set(OutEntrustOrder::getAuditBy, auditBy)
+ .set(OutEntrustOrder::getAuditByName, auditByName)
+ .set(OutEntrustOrder::getAuditTime, new Date())
+ .set(OutEntrustOrder::getAuditRemark, auditRemark)
+ .set(OutEntrustOrder::getUpdateBy, auditBy)
+ .set(OutEntrustOrder::getUpdateByName, auditByName)
+ .set(OutEntrustOrder::getUpdateTime, new Date()));
+ }
+
+ /**
+ * 下发:下发状态置为已下发(订单状态保持已审核)
+ */
+ @Override
+ public Boolean issue(List ids, Long issueBy, String issueByName) {
+ return this.update(new LambdaUpdateWrapper()
+ .in(OutEntrustOrder::getId, ids)
+ .eq(OutEntrustOrder::getDelFlag, 1)
+ .set(OutEntrustOrder::getIssueStatus, OutEntrustOrderConstant.ISSUE_STATUS_2)
+ .set(OutEntrustOrder::getIssueBy, issueBy)
+ .set(OutEntrustOrder::getIssueByName, issueByName)
+ .set(OutEntrustOrder::getIssueTime, new Date())
+ .set(OutEntrustOrder::getUpdateBy, issueBy)
+ .set(OutEntrustOrder::getUpdateByName, issueByName)
+ .set(OutEntrustOrder::getUpdateTime, new Date()));
+ }
+
+ /**
+ * 完成:已审核(已下发)/进行中 → 已入库
+ */
+ @Override
+ public Boolean finish(List ids, Long updateBy, String updateByName) {
+ return this.update(new LambdaUpdateWrapper()
+ .in(OutEntrustOrder::getId, ids)
+ .eq(OutEntrustOrder::getDelFlag, 1)
+ .set(OutEntrustOrder::getOrderStatus, OutEntrustOrderConstant.ORDER_STATUS_STORED)
+ .set(OutEntrustOrder::getUpdateBy, updateBy)
+ .set(OutEntrustOrder::getUpdateByName, updateByName)
+ .set(OutEntrustOrder::getUpdateTime, new Date()));
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/po/OutEntrustOrderDetailPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/po/OutEntrustOrderDetailPO.java
new file mode 100644
index 000000000..046cbd06f
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/po/OutEntrustOrderDetailPO.java
@@ -0,0 +1,100 @@
+package com.mhd.oms.domain.outEntrustOrder.repository.po;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.mhd.common.core.web.domain.BaseVOEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 出仓委托单明细对象 oms_out_entrust_order_detail
+ *
+ * @author rcx
+ * @date 2026-09-02
+ */
+
+@Data
+@ApiModel(value = "出仓委托单明细对象", description = "出仓委托单明细响应对象")
+public class OutEntrustOrderDetailPO extends BaseVOEntity {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("编号")
+ private Long id;
+
+ @ApiModelProperty("委托单号(关联主表)")
+ private String entrustNumber;
+
+ @ApiModelProperty("物料基础信息ID")
+ private Long materialBaseInfoId;
+ @ApiModelProperty("商品编码")
+ private String materialCode;
+ @ApiModelProperty("商品名称(物料档案名)")
+ private String materialName;
+ @ApiModelProperty("商品条形码")
+ private String barCode;
+
+ @ApiModelProperty("商品名称(委托单品名)")
+ private String commodityName;
+ @ApiModelProperty("商品编号")
+ private String commodityNo;
+ @ApiModelProperty("料号")
+ private String materialNo;
+ @ApiModelProperty("规格型号")
+ private String specificationModel;
+ @ApiModelProperty("SKU码")
+ private String skucode;
+ @ApiModelProperty("发票号")
+ private String invoiceNo;
+
+ @ApiModelProperty("申报单位")
+ private String declareUnit;
+ @ApiModelProperty("申报数量")
+ private BigDecimal declareQuantity;
+ @ApiModelProperty("单价")
+ private BigDecimal unitPrice;
+
+ @ApiModelProperty("单位")
+ private String unit;
+ @ApiModelProperty("升")
+ private String liter;
+ @ApiModelProperty("尺寸")
+ private String size;
+ @ApiModelProperty("箱数")
+ private BigDecimal caseCount;
+ @ApiModelProperty("件数")
+ private BigDecimal pieceCount;
+ @ApiModelProperty("出库数量")
+ private BigDecimal outboundQuantity;
+ @ApiModelProperty("总净重(千克)")
+ private BigDecimal totalNetWeight;
+ @ApiModelProperty("总毛重(千克)")
+ private BigDecimal totalGrossWeight;
+ @ApiModelProperty("总体积(立方米)")
+ private BigDecimal totalVolume;
+ @ApiModelProperty("总面积")
+ private BigDecimal totalArea;
+ @ApiModelProperty("总金额")
+ private BigDecimal totalAmount;
+ @ApiModelProperty("币制")
+ private String currency;
+ @ApiModelProperty("批次")
+ private String batchRefNo;
+ @ApiModelProperty("单据参考号")
+ private String sheetRefNo;
+ @ApiModelProperty("原产国")
+ private String countryOfOrigin;
+ @ApiModelProperty("箱/托盘号")
+ private String boxPalletNo;
+
+ @ApiModelProperty("备注")
+ private String remark;
+
+ @ApiModelProperty("创建时间")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/po/OutEntrustOrderPO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/po/OutEntrustOrderPO.java
new file mode 100644
index 000000000..f2e3e7843
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/po/OutEntrustOrderPO.java
@@ -0,0 +1,212 @@
+package com.mhd.oms.domain.outEntrustOrder.repository.po;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.mhd.common.core.web.domain.BaseVOEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 出仓委托单对象 oms_out_entrust_order
+ *
+ * @author rcx
+ * @date 2026-09-02
+ */
+
+@Data
+@ApiModel(value = "出仓委托单对象", description = "出仓委托单响应对象")
+public class OutEntrustOrderPO extends BaseVOEntity {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("编号")
+ @TableId(type = IdType.AUTO)
+ private Long id;
+
+ @ApiModelProperty("委托单号")
+ private String entrustNumber;
+
+ @ApiModelProperty("出库仓库ID")
+ private Long warehouseId;
+ @ApiModelProperty("仓库编码")
+ private String warehouseCode;
+ @ApiModelProperty("仓库名称")
+ private String warehouseName;
+
+ @ApiModelProperty("客户ID(货主)")
+ private Long shipperId;
+ @ApiModelProperty("客户编码")
+ private String shipperCode;
+ @ApiModelProperty("客户名称")
+ private String shipperName;
+
+ @ApiModelProperty("业务员ID")
+ private String salesmanId;
+ @ApiModelProperty("业务员名称")
+ private String salesmanName;
+
+ @ApiModelProperty("订单类型编码(字典outDocumentType)")
+ private String orderTypeCode;
+ @ApiModelProperty("订单类型名称")
+ private String orderTypeName;
+
+ @ApiModelProperty("结算币种")
+ private String settlementCurrency;
+
+ @ApiModelProperty("优先级别编码")
+ private String priorityLevelCode;
+ @ApiModelProperty("优先级别名称")
+ private String priorityLevelName;
+
+ @ApiModelProperty("是否直接出库: 1-是 2-否")
+ private Integer directWarehouse;
+
+ @ApiModelProperty("是否复核: 1-是 2-否")
+ private Integer review;
+
+ @ApiModelProperty("预计出货时间")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date expectTime;
+
+ @ApiModelProperty("出仓日期")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date outboundDate;
+
+ @ApiModelProperty("orderDate")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date orderDate;
+
+ @ApiModelProperty("完成时间")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date completeTime;
+
+ @ApiModelProperty("To(收货人)")
+ @JsonProperty("to")
+ private String toReceiver;
+
+ @ApiModelProperty("联系人")
+ private String contactPerson;
+
+ @ApiModelProperty("车型及车牌")
+ private String vehicleModelPlate;
+
+ @ApiModelProperty("委托编号(客户委托单号)")
+ private String entrustNo;
+
+ @ApiModelProperty("Tel电话")
+ private String tel;
+
+ @ApiModelProperty("Fax传真")
+ private String fax;
+
+ @ApiModelProperty("司机签名")
+ private String driverSign;
+
+ @ApiModelProperty("承运商编码")
+ private String carrier;
+ @ApiModelProperty("承运商名称")
+ private String carrierName;
+
+ @ApiModelProperty("柜号")
+ private String containerNo;
+ @ApiModelProperty("柜")
+ private String containerNoName;
+
+ @ApiModelProperty("运输方式编码")
+ private String transportModeCode;
+ @ApiModelProperty("运输方式名称")
+ private String transportModeName;
+
+ @ApiModelProperty("监管方式编码")
+ private String supervisionModeCode;
+ @ApiModelProperty("监管方式名称")
+ private String supervisionModeName;
+
+ @ApiModelProperty("申报地关区")
+ private String declareCustoms;
+
+ @ApiModelProperty("进出境关别")
+ private String entryExitCustoms;
+
+ @ApiModelProperty("起运/运抵国(地区)")
+ private String departureArrivalCountry;
+
+ @ApiModelProperty("海关是否查验货物")
+ private String customsInspectionFlag;
+
+ @ApiModelProperty("是否需要报关(预留,页面隐藏)")
+ private String needDeclareFlag;
+ @ApiModelProperty("是否需要运输(预留,页面隐藏)")
+ private String needTransportFlag;
+
+ @ApiModelProperty("生产商")
+ private String manufacturer;
+
+ @ApiModelProperty("报关员姓名及联系方式")
+ private String customsDeclarerInfo;
+
+ @ApiModelProperty("送货地址")
+ private String deliveryAddr;
+
+ @ApiModelProperty("附件url")
+ private String annexUrl;
+
+ @ApiModelProperty("订单状态:1-待审核 2-已审核 3-已驳回 4-进行中 5-已入库")
+ private Integer orderStatus;
+ @ApiModelProperty("订单状态")
+ private String orderStatusStr;
+
+ @ApiModelProperty("审核人ID")
+ private Long auditBy;
+ @ApiModelProperty("审核人姓名")
+ private String auditByName;
+ @ApiModelProperty("审核时间")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date auditTime;
+ @ApiModelProperty("审核备注(驳回原因)")
+ private String auditRemark;
+
+ @ApiModelProperty("下发状态:1-未下发 2-已下发")
+ private Integer issueStatus;
+ @ApiModelProperty("下发状态")
+ private String issueStatusStr;
+ @ApiModelProperty("下发人ID")
+ private Long issueBy;
+ @ApiModelProperty("下发人姓名")
+ private String issueByName;
+ @ApiModelProperty("下发时间")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date issueTime;
+
+ @ApiModelProperty("申报总数量(明细申报数量之和)")
+ private BigDecimal declareTotalQuantity;
+
+ @ApiModelProperty("发票号(列表展示用,明细发票号逗号拼接;详情请看明细)")
+ private String invoiceNo;
+
+ @ApiModelProperty("备注")
+ private String remark;
+
+ @ApiModelProperty("组织ID")
+ private Long organizationId;
+ @ApiModelProperty("组织名称")
+ private String organizationName;
+ @ApiModelProperty("一级组织ID")
+ private Long topOrganizationId;
+
+ @ApiModelProperty("商品明细")
+ private List materialDetailList;
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/todo/OutEntrustOrderDO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/todo/OutEntrustOrderDO.java
new file mode 100644
index 000000000..0c6e44725
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/todo/OutEntrustOrderDO.java
@@ -0,0 +1,216 @@
+package com.mhd.oms.domain.outEntrustOrder.repository.todo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.mhd.common.core.web.domain.BaseVOEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 出仓委托单对象 oms_out_entrust_order
+ *
+ * @author rcx
+ * @date 2026-09-02
+ */
+
+@Data
+public class OutEntrustOrderDO extends BaseVOEntity {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("编号")
+ private Long id;
+ @ApiModelProperty("编号集合")
+ private List idList;
+
+ @ApiModelProperty(name = "组织ID集合")
+ private List organizationIdList;
+
+ @ApiModelProperty(name = "权限菜单ID")
+ private Long permissionMenuId;
+
+ @ApiModelProperty("委托单号")
+ private String entrustNumber;
+
+ @ApiModelProperty("出库仓库ID")
+ private Long warehouseId;
+ @ApiModelProperty("仓库编码")
+ private String warehouseCode;
+ @ApiModelProperty("仓库名称")
+ private String warehouseName;
+
+ @ApiModelProperty("客户ID(货主)")
+ private Long shipperId;
+ @ApiModelProperty("客户编码")
+ private String shipperCode;
+ @ApiModelProperty("客户名称")
+ private String shipperName;
+
+ @ApiModelProperty("业务员ID")
+ private String salesmanId;
+ @ApiModelProperty("业务员名称")
+ private String salesmanName;
+
+ @ApiModelProperty("订单类型编码(字典outDocumentType)")
+ private String orderTypeCode;
+ @ApiModelProperty("订单类型名称")
+ private String orderTypeName;
+
+ @ApiModelProperty("结算币种")
+ private String settlementCurrency;
+
+ @ApiModelProperty("优先级别编码")
+ private String priorityLevelCode;
+ @ApiModelProperty("优先级别名称")
+ private String priorityLevelName;
+
+ @ApiModelProperty("是否直接出库: 1-是 2-否")
+ private Integer directWarehouse;
+
+ @ApiModelProperty("是否复核: 1-是 2-否")
+ private Integer review;
+
+ @ApiModelProperty("预计出货时间")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date expectTime;
+
+ @ApiModelProperty("出仓日期")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date outboundDate;
+
+ @ApiModelProperty("orderDate")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date orderDate;
+
+ @ApiModelProperty("完成时间")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date completeTime;
+
+ @ApiModelProperty("To(收货人)")
+ private String toReceiver;
+
+ @ApiModelProperty("联系人")
+ private String contactPerson;
+
+ @ApiModelProperty("车型及车牌")
+ private String vehicleModelPlate;
+
+ @ApiModelProperty("委托编号(客户委托单号)")
+ private String entrustNo;
+
+ @ApiModelProperty("Tel电话")
+ private String tel;
+
+ @ApiModelProperty("Fax传真")
+ private String fax;
+
+ @ApiModelProperty("司机签名")
+ private String driverSign;
+
+ @ApiModelProperty("承运商编码")
+ private String carrier;
+ @ApiModelProperty("承运商名称")
+ private String carrierName;
+
+ @ApiModelProperty("柜号")
+ private String containerNo;
+ @ApiModelProperty("柜")
+ private String containerNoName;
+
+ @ApiModelProperty("运输方式编码")
+ private String transportModeCode;
+ @ApiModelProperty("运输方式名称")
+ private String transportModeName;
+
+ @ApiModelProperty("监管方式编码")
+ private String supervisionModeCode;
+ @ApiModelProperty("监管方式名称")
+ private String supervisionModeName;
+
+ @ApiModelProperty("申报地关区")
+ private String declareCustoms;
+
+ @ApiModelProperty("进出境关别")
+ private String entryExitCustoms;
+
+ @ApiModelProperty("起运/运抵国(地区)")
+ private String departureArrivalCountry;
+
+ @ApiModelProperty("海关是否查验货物")
+ private String customsInspectionFlag;
+
+ @ApiModelProperty("是否需要报关(预留,页面隐藏)")
+ private String needDeclareFlag;
+ @ApiModelProperty("是否需要运输(预留,页面隐藏)")
+ private String needTransportFlag;
+
+ @ApiModelProperty("生产商")
+ private String manufacturer;
+
+ @ApiModelProperty("报关员姓名及联系方式")
+ private String customsDeclarerInfo;
+
+ @ApiModelProperty("送货地址")
+ private String deliveryAddr;
+
+ @ApiModelProperty("附件url")
+ private String annexUrl;
+
+ @ApiModelProperty("订单状态:1-待审核 2-已审核 3-已驳回 4-进行中 5-已入库")
+ private Integer orderStatus;
+
+ @ApiModelProperty("审核人ID")
+ private Long auditBy;
+ @ApiModelProperty("审核人姓名")
+ private String auditByName;
+ @ApiModelProperty("审核时间")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date auditTime;
+ @ApiModelProperty("审核备注(驳回原因)")
+ private String auditRemark;
+
+ @ApiModelProperty("下发状态:1-未下发 2-已下发")
+ private Integer issueStatus;
+ @ApiModelProperty("下发人ID")
+ private Long issueBy;
+ @ApiModelProperty("下发人姓名")
+ private String issueByName;
+ @ApiModelProperty("下发时间")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date issueTime;
+
+ @ApiModelProperty("申报总数量(明细申报数量之和)")
+ private BigDecimal declareTotalQuantity;
+
+ @ApiModelProperty("备注")
+ private String remark;
+
+ @ApiModelProperty("组织ID")
+ private Long organizationId;
+ @ApiModelProperty("组织名称")
+ private String organizationName;
+ @ApiModelProperty("一级组织ID")
+ private Long topOrganizationId;
+
+ @ApiModelProperty("查询-创建开始时间(年月日yyyy-MM-dd)")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private Date beginCreateTime;
+ @ApiModelProperty("查询-创建结束时间(年月日yyyy-MM-dd,含当天)")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private Date endCreateTime;
+
+ @ApiModelProperty("查询-发票号(模糊匹配明细发票号)")
+ private String invoiceNo;
+
+ @ApiModelProperty("商品明细")
+ private List materialDetailList;
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/todo/OutEntrustOrderDetailDO.java b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/todo/OutEntrustOrderDetailDO.java
new file mode 100644
index 000000000..68d9f0381
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/repository/todo/OutEntrustOrderDetailDO.java
@@ -0,0 +1,90 @@
+package com.mhd.oms.domain.outEntrustOrder.repository.todo;
+
+import com.mhd.common.core.web.domain.BaseVOEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 出仓委托单明细对象 oms_out_entrust_order_detail
+ *
+ * @author rcx
+ * @date 2026-09-02
+ */
+
+@Data
+public class OutEntrustOrderDetailDO extends BaseVOEntity {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("编号")
+ private Long id;
+
+ @ApiModelProperty("委托单号(关联主表)")
+ private String entrustNumber;
+
+ @ApiModelProperty("物料基础信息ID")
+ private Long materialBaseInfoId;
+ @ApiModelProperty("商品编码")
+ private String materialCode;
+ @ApiModelProperty("商品名称(物料档案名)")
+ private String materialName;
+ @ApiModelProperty("商品条形码")
+ private String barCode;
+
+ @ApiModelProperty("商品名称(委托单品名)")
+ private String commodityName;
+ @ApiModelProperty("商品编号")
+ private String commodityNo;
+ @ApiModelProperty("料号")
+ private String materialNo;
+ @ApiModelProperty("规格型号")
+ private String specificationModel;
+ @ApiModelProperty("SKU码")
+ private String skucode;
+ @ApiModelProperty("发票号")
+ private String invoiceNo;
+
+ @ApiModelProperty("申报单位")
+ private String declareUnit;
+ @ApiModelProperty("申报数量")
+ private BigDecimal declareQuantity;
+ @ApiModelProperty("单价")
+ private BigDecimal unitPrice;
+
+ @ApiModelProperty("单位")
+ private String unit;
+ @ApiModelProperty("升")
+ private String liter;
+ @ApiModelProperty("尺寸")
+ private String size;
+ @ApiModelProperty("箱数")
+ private BigDecimal caseCount;
+ @ApiModelProperty("件数")
+ private BigDecimal pieceCount;
+ @ApiModelProperty("出库数量")
+ private BigDecimal outboundQuantity;
+ @ApiModelProperty("总净重(千克)")
+ private BigDecimal totalNetWeight;
+ @ApiModelProperty("总毛重(千克)")
+ private BigDecimal totalGrossWeight;
+ @ApiModelProperty("总体积(立方米)")
+ private BigDecimal totalVolume;
+ @ApiModelProperty("总面积")
+ private BigDecimal totalArea;
+ @ApiModelProperty("总金额")
+ private BigDecimal totalAmount;
+ @ApiModelProperty("币制")
+ private String currency;
+ @ApiModelProperty("批次")
+ private String batchRefNo;
+ @ApiModelProperty("单据参考号")
+ private String sheetRefNo;
+ @ApiModelProperty("原产国")
+ private String countryOfOrigin;
+ @ApiModelProperty("箱/托盘号")
+ private String boxPalletNo;
+
+ @ApiModelProperty("备注")
+ private String remark;
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/service/OutEntrustOrderDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/service/OutEntrustOrderDomainService.java
new file mode 100644
index 000000000..8d1854105
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/outEntrustOrder/service/OutEntrustOrderDomainService.java
@@ -0,0 +1,177 @@
+package com.mhd.oms.domain.outEntrustOrder.service;
+
+import com.mhd.common.core.exception.ServiceException;
+import com.mhd.common.core.utils.OrderSequence;
+import com.mhd.oms.constant.OutEntrustOrderConstant;
+import com.mhd.oms.domain.outEntrustOrder.repository.facade.IOutEntrustOrderDetailService;
+import com.mhd.oms.domain.outEntrustOrder.repository.facade.IOutEntrustOrderService;
+import com.mhd.oms.domain.outEntrustOrder.repository.po.OutEntrustOrderDetailPO;
+import com.mhd.oms.domain.outEntrustOrder.repository.po.OutEntrustOrderPO;
+import com.mhd.oms.domain.outEntrustOrder.repository.todo.OutEntrustOrderDO;
+import com.mhd.oms.domain.outEntrustOrder.repository.todo.OutEntrustOrderDetailDO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 出仓委托单
+ *
+ * @author rcx
+ * @date 2026-09-02
+ */
+@Service
+@Slf4j
+public class OutEntrustOrderDomainService {
+
+ @Autowired
+ private IOutEntrustOrderService outEntrustOrderService;
+
+ @Autowired
+ private IOutEntrustOrderDetailService outEntrustOrderDetailService;
+
+ /**
+ * 分页查询出仓委托单列表
+ */
+ public List queryList(OutEntrustOrderDO outEntrustOrderDO) {
+ return outEntrustOrderService.queryList(outEntrustOrderDO);
+ }
+
+ /**
+ * 新增出仓委托单(主单+明细)
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public Boolean insert(OutEntrustOrderDO outEntrustOrderDO) {
+ //生成委托单号,初始状态:待审核、未下发;新单无审核信息
+ outEntrustOrderDO.setEntrustNumber(OrderSequence.getOrderCode(OutEntrustOrderConstant.OUT_ENTRUST_NO_PREFIX));
+ outEntrustOrderDO.setOrderStatus(OutEntrustOrderConstant.ORDER_STATUS_PENDING_AUDIT);
+ outEntrustOrderDO.setIssueStatus(OutEntrustOrderConstant.ISSUE_STATUS_1);
+ outEntrustOrderDO.setAuditRemark(null);
+ outEntrustOrderService.insert(outEntrustOrderDO);
+ outEntrustOrderDetailService.batchInsert(outEntrustOrderDO.getEntrustNumber(), buildDetailList(outEntrustOrderDO));
+ return true;
+ }
+
+ /**
+ * 修改出仓委托单(仅已创建且未下发可修改,明细全量替换)
+ */
+ /**
+ * 修改出仓委托单(仅待审核/已驳回且未下发可修改,明细全量替换)
+ * 已驳回单重新编辑后状态重置为待审核,待重新审核
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public Boolean update(OutEntrustOrderDO outEntrustOrderDO) {
+ OutEntrustOrderPO orderPO = checkEditable(outEntrustOrderDO.getId());
+ //已驳回 → 编辑后回到待审核;待审核 → 保持不变(置null,updateById跳过该列)
+ outEntrustOrderDO.setOrderStatus(OutEntrustOrderConstant.ORDER_STATUS_REJECTED.equals(orderPO.getOrderStatus())
+ ? OutEntrustOrderConstant.ORDER_STATUS_PENDING_AUDIT : null);
+ outEntrustOrderDO.setEntrustNumber(orderPO.getEntrustNumber());
+ outEntrustOrderService.update(outEntrustOrderDO);
+ //明细全量替换:逻辑删除旧明细后重新保存
+ outEntrustOrderDetailService.deleteByEntrustNumber(outEntrustOrderDO.getEntrustNumber());
+ outEntrustOrderDetailService.batchInsert(outEntrustOrderDO.getEntrustNumber(), buildDetailList(outEntrustOrderDO));
+ return true;
+ }
+
+ /**
+ * 批量删除出仓委托单(仅待审核/已驳回且未下发可删除)
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public Boolean delete(Long[] ids) {
+ List orderList = outEntrustOrderService.getInfoByIds(java.util.Arrays.stream(ids).collect(Collectors.toList()));
+ List entrustNumbers = orderList.stream().map(OutEntrustOrderPO::getEntrustNumber).collect(Collectors.toList());
+ outEntrustOrderService.delete(ids);
+ outEntrustOrderDetailService.deleteByEntrustNumbers(entrustNumbers);
+ return true;
+ }
+
+ /**
+ * 获取出仓委托单详情(含明细)
+ */
+ public OutEntrustOrderPO getInfo(Long id) {
+ OutEntrustOrderPO outEntrustOrderPO = outEntrustOrderService.getInfo(id);
+ List detailList = outEntrustOrderDetailService.queryByEntrustNumber(outEntrustOrderPO.getEntrustNumber());
+ outEntrustOrderPO.setMaterialDetailList(detailList);
+ return outEntrustOrderPO;
+ }
+
+ /**
+ * 批量审核:待审核/已驳回 → 已审核(2)或已驳回(3)
+ */
+ public Boolean audit(List ids, Integer targetStatus, Long auditBy, String auditByName, String auditRemark) {
+ return outEntrustOrderService.audit(ids, targetStatus, auditBy, auditByName, auditRemark);
+ }
+
+ /**
+ * 批量下发:订单状态保持已审核,下发状态置为已下发(WMS侧单据由ApplicationService推送)
+ */
+ public Boolean issue(List ids, Long issueBy, String issueByName) {
+ return outEntrustOrderService.issue(ids, issueBy, issueByName);
+ }
+
+ /**
+ * 完成:已审核(已下发) → 已入库(OMS人工推进)
+ */
+ public Boolean finish(List ids, Long updateBy, String updateByName) {
+ return outEntrustOrderService.finish(ids, updateBy, updateByName);
+ }
+
+ /**
+ * 根据委托单号查询明细
+ */
+ public List getDetailByEntrustNumber(String entrustNumber) {
+ return outEntrustOrderDetailService.queryByEntrustNumber(entrustNumber);
+ }
+
+ /**
+ * 根据委托单号集合查询明细
+ */
+ public List getDetailByEntrustNumbers(List entrustNumbers) {
+ return outEntrustOrderDetailService.queryByEntrustNumbers(entrustNumbers);
+ }
+
+ /**
+ * 根据编号集合查询出仓委托单列表
+ */
+ public List queryByIds(List ids) {
+ return outEntrustOrderService.getInfoByIds(ids);
+ }
+
+ /**
+ * 明细补充审计信息(取主单的创建/更新人)
+ */
+ private List buildDetailList(OutEntrustOrderDO outEntrustOrderDO) {
+ List detailDOList = outEntrustOrderDO.getMaterialDetailList();
+ for (OutEntrustOrderDetailDO detailDO : detailDOList) {
+ detailDO.setCreateBy(outEntrustOrderDO.getCreateBy());
+ detailDO.setCreateByName(outEntrustOrderDO.getCreateByName());
+ detailDO.setCreateTime(outEntrustOrderDO.getCreateTime());
+ detailDO.setUpdateBy(outEntrustOrderDO.getUpdateBy());
+ detailDO.setUpdateByName(outEntrustOrderDO.getUpdateByName());
+ detailDO.setUpdateTime(outEntrustOrderDO.getUpdateTime());
+ detailDO.setDelFlag(1);
+ }
+ return detailDOList;
+ }
+
+ /**
+ * 校验委托单是否可编辑/删除:仅待审核/已驳回 且未下发
+ *
+ * @return 委托单信息(供调用方复用当前状态/委托单号)
+ */
+ private OutEntrustOrderPO checkEditable(Long id) {
+ OutEntrustOrderPO outEntrustOrderPO = outEntrustOrderService.getInfo(id);
+ boolean editableStatus = OutEntrustOrderConstant.ORDER_STATUS_PENDING_AUDIT.equals(outEntrustOrderPO.getOrderStatus())
+ || OutEntrustOrderConstant.ORDER_STATUS_REJECTED.equals(outEntrustOrderPO.getOrderStatus());
+ if (!editableStatus) {
+ throw new ServiceException("已审核/进行中/已入库的委托单不允许修改");
+ }
+ if (!OutEntrustOrderConstant.ISSUE_STATUS_1.equals(outEntrustOrderPO.getIssueStatus())) {
+ throw new ServiceException("已下发的委托单不允许修改");
+ }
+ return outEntrustOrderPO;
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/assembler/outEntrustOrder/OutEntrustOrderAssembler.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/assembler/outEntrustOrder/OutEntrustOrderAssembler.java
new file mode 100644
index 000000000..5f3c7f145
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/assembler/outEntrustOrder/OutEntrustOrderAssembler.java
@@ -0,0 +1,84 @@
+package com.mhd.oms.interfaces.assembler.outEntrustOrder;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.mhd.common.core.exception.digitalLogisticsException.DigitalLogisticsException;
+import com.mhd.common.core.exception.digitalLogisticsException.UserError;
+import com.mhd.common.core.utils.IgnoreNullUtil;
+import com.mhd.common.core.utils.bean.BeanUtils;
+import com.mhd.common.security.utils.SecurityUtils;
+import com.mhd.oms.domain.outEntrustOrder.repository.todo.OutEntrustOrderDO;
+import com.mhd.oms.domain.outEntrustOrder.repository.todo.OutEntrustOrderDetailDO;
+import com.mhd.oms.interfaces.dto.outEntrustOrder.OutEntrustOrderDTO;
+import com.mhd.oms.interfaces.dto.outEntrustOrder.OutEntrustOrderDetailDTO;
+import com.mhd.system.api.model.LoginUser;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 出仓委托单Assembler
+ *
+ * @author rcx
+ * @date 2026-09-02
+ */
+@Component
+public class OutEntrustOrderAssembler {
+
+ /**
+ * 转换实体
+ */
+ public OutEntrustOrderDO toDO(OutEntrustOrderDTO outEntrustOrderDTO) {
+ OutEntrustOrderDO outEntrustOrderDO = new OutEntrustOrderDO();
+ // 拷贝
+ BeanUtils.copyProperties(outEntrustOrderDTO, outEntrustOrderDO, IgnoreNullUtil.getNullPropertyNames(outEntrustOrderDTO));
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (ObjectUtil.isNull(loginUser)) {
+ throw new DigitalLogisticsException(UserError.TIMEOUT);
+ }
+ String userName = loginUser.getUsername();
+ // 获取登录人id
+ Long userId = loginUser.getUserid();
+ if (outEntrustOrderDTO.getId() != null) {
+ if (userId != null) {
+ outEntrustOrderDO.setUpdateBy(userId);
+ } else {
+ outEntrustOrderDO.setUpdateBy(0L);
+ }
+ outEntrustOrderDO.setUpdateByName(userName);
+ outEntrustOrderDO.setUpdateTime(new Date());
+
+ } else {
+ if (userId != null) {
+ outEntrustOrderDO.setCreateBy(userId);
+ outEntrustOrderDO.setUpdateBy(userId);
+ } else {
+ outEntrustOrderDO.setCreateBy(0L);
+ outEntrustOrderDO.setUpdateBy(0L);
+ }
+ outEntrustOrderDO.setCreateByName(userName);
+ outEntrustOrderDO.setUpdateByName(userName);
+ outEntrustOrderDO.setCreateTime(new Date());
+ outEntrustOrderDO.setUpdateTime(new Date());
+ outEntrustOrderDO.setDelFlag(1);
+ }
+ // 明细转换
+ List materialDetailList = outEntrustOrderDTO.getMaterialDetailList();
+ if (materialDetailList != null) {
+ outEntrustOrderDO.setMaterialDetailList(toDetailDOList(materialDetailList));
+ }
+ return outEntrustOrderDO;
+ }
+
+ /**
+ * 明细DTO转DO
+ */
+ public List toDetailDOList(List detailDTOList) {
+ return detailDTOList.stream().map(detailDTO -> {
+ OutEntrustOrderDetailDO detailDO = new OutEntrustOrderDetailDO();
+ BeanUtils.copyProperties(detailDTO, detailDO, IgnoreNullUtil.getNullPropertyNames(detailDTO));
+ return detailDO;
+ }).collect(Collectors.toList());
+ }
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/dto/outEntrustOrder/OutEntrustOrderDTO.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/dto/outEntrustOrder/OutEntrustOrderDTO.java
new file mode 100644
index 000000000..832d51670
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/dto/outEntrustOrder/OutEntrustOrderDTO.java
@@ -0,0 +1,198 @@
+package com.mhd.oms.interfaces.dto.outEntrustOrder;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.mhd.common.core.web.domain.BaseVOEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 出仓委托单对象 oms_out_entrust_order
+ * 表单字段对齐WMS出库管理新增(报关/委托信息块)
+ *
+ * @author rcx
+ * @date 2026-09-02
+ */
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class OutEntrustOrderDTO extends BaseVOEntity {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("编号")
+ private Long id;
+ @ApiModelProperty("编号集合(审核/下发/删除用)")
+ private List idList;
+
+ @ApiModelProperty(name = "组织ID集合")
+ private List organizationIdList;
+
+ @ApiModelProperty(name = "权限菜单ID")
+ private Long permissionMenuId;
+
+ @ApiModelProperty("委托单号")
+ private String entrustNumber;
+
+ @ApiModelProperty("出库仓库ID(必填)")
+ private Long warehouseId;
+ @ApiModelProperty("仓库编码")
+ private String warehouseCode;
+ @ApiModelProperty("仓库名称")
+ private String warehouseName;
+
+ @ApiModelProperty("客户ID(货主,必填)")
+ private Long shipperId;
+ @ApiModelProperty("客户编码")
+ private String shipperCode;
+ @ApiModelProperty("客户名称")
+ private String shipperName;
+
+ @ApiModelProperty("业务员ID(必填)")
+ private String salesmanId;
+ @ApiModelProperty("业务员名称")
+ private String salesmanName;
+
+ @ApiModelProperty("订单类型编码(字典outDocumentType)")
+ private String orderTypeCode;
+ @ApiModelProperty("订单类型名称")
+ private String orderTypeName;
+
+ @ApiModelProperty("结算币种")
+ private String settlementCurrency;
+
+ @ApiModelProperty("优先级别编码")
+ private String priorityLevelCode;
+ @ApiModelProperty("优先级别名称")
+ private String priorityLevelName;
+
+ @ApiModelProperty("是否直接出库: 1-是 2-否")
+ private Integer directWarehouse;
+
+ @ApiModelProperty("是否复核: 1-是 2-否")
+ private Integer review;
+
+ @ApiModelProperty("预计出货时间")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date expectTime;
+
+ @ApiModelProperty("出仓日期")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date outboundDate;
+
+ @ApiModelProperty("orderDate")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date orderDate;
+
+ @ApiModelProperty("完成时间")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date completeTime;
+
+ @ApiModelProperty("To(收货人)")
+ @JsonProperty("to")
+ private String toReceiver;
+
+ @ApiModelProperty("联系人")
+ private String contactPerson;
+
+ @ApiModelProperty("车型及车牌")
+ private String vehicleModelPlate;
+
+ @ApiModelProperty("委托编号(客户委托单号)")
+ private String entrustNo;
+
+ @ApiModelProperty("Tel电话")
+ private String tel;
+
+ @ApiModelProperty("Fax传真")
+ private String fax;
+
+ @ApiModelProperty("司机签名")
+ private String driverSign;
+
+ @ApiModelProperty("承运商编码")
+ private String carrier;
+ @ApiModelProperty("承运商名称")
+ private String carrierName;
+
+ @ApiModelProperty("柜号")
+ private String containerNo;
+ @ApiModelProperty("柜")
+ private String containerNoName;
+
+ @ApiModelProperty("运输方式编码")
+ private String transportModeCode;
+ @ApiModelProperty("运输方式名称")
+ private String transportModeName;
+
+ @ApiModelProperty("监管方式编码")
+ private String supervisionModeCode;
+ @ApiModelProperty("监管方式名称")
+ private String supervisionModeName;
+
+ @ApiModelProperty("申报地关区")
+ private String declareCustoms;
+
+ @ApiModelProperty("进出境关别")
+ private String entryExitCustoms;
+
+ @ApiModelProperty("起运/运抵国(地区)")
+ private String departureArrivalCountry;
+
+ @ApiModelProperty("海关是否查验货物")
+ private String customsInspectionFlag;
+
+ @ApiModelProperty("是否需要报关(预留,页面隐藏)")
+ private String needDeclareFlag;
+ @ApiModelProperty("是否需要运输(预留,页面隐藏)")
+ private String needTransportFlag;
+
+ @ApiModelProperty("生产商")
+ private String manufacturer;
+
+ @ApiModelProperty("报关员姓名及联系方式")
+ private String customsDeclarerInfo;
+
+ @ApiModelProperty("送货地址")
+ private String deliveryAddr;
+
+ @ApiModelProperty("附件url")
+ private String annexUrl;
+
+ @ApiModelProperty("订单状态:1-待审核 2-已审核 3-已驳回 4-进行中 5-已入库")
+ private Integer orderStatus;
+
+ @ApiModelProperty("下发状态:1-未下发 2-已下发")
+ private Integer issueStatus;
+
+ @ApiModelProperty("审核备注(驳回原因,审核时传)")
+ private String auditRemark;
+
+ @ApiModelProperty("申报总数量(服务端按明细汇总,无需传入)")
+ private BigDecimal declareTotalQuantity;
+
+ @ApiModelProperty("备注")
+ private String remark;
+
+ @ApiModelProperty("查询-创建开始时间(年月日yyyy-MM-dd)")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private Date beginCreateTime;
+ @ApiModelProperty("查询-创建结束时间(年月日yyyy-MM-dd,含当天)")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private Date endCreateTime;
+
+ @ApiModelProperty("查询-发票号(模糊匹配明细发票号)")
+ private String invoiceNo;
+
+ @ApiModelProperty("商品明细")
+ private List materialDetailList;
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/dto/outEntrustOrder/OutEntrustOrderDetailDTO.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/dto/outEntrustOrder/OutEntrustOrderDetailDTO.java
new file mode 100644
index 000000000..8e261a274
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/dto/outEntrustOrder/OutEntrustOrderDetailDTO.java
@@ -0,0 +1,93 @@
+package com.mhd.oms.interfaces.dto.outEntrustOrder;
+
+import com.mhd.common.core.web.domain.BaseVOEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+
+/**
+ * 出仓委托单明细对象 oms_out_entrust_order_detail
+ * 明细列对齐WMS出库管理新增(出仓委托单明细列)
+ *
+ * @author rcx
+ * @date 2026-09-02
+ */
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class OutEntrustOrderDetailDTO extends BaseVOEntity {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("编号")
+ private Long id;
+
+ @ApiModelProperty("委托单号(关联主表)")
+ private String entrustNumber;
+
+ @ApiModelProperty("物料基础信息ID")
+ private Long materialBaseInfoId;
+ @ApiModelProperty("商品编码")
+ private String materialCode;
+ @ApiModelProperty("商品名称(物料档案名,与commodityName至少其一)")
+ private String materialName;
+ @ApiModelProperty("商品条形码")
+ private String barCode;
+
+ @ApiModelProperty("商品名称(委托单品名,与materialName至少其一)")
+ private String commodityName;
+ @ApiModelProperty("商品编号")
+ private String commodityNo;
+ @ApiModelProperty("料号")
+ private String materialNo;
+ @ApiModelProperty("规格型号")
+ private String specificationModel;
+ @ApiModelProperty("SKU码")
+ private String skucode;
+ @ApiModelProperty("发票号")
+ private String invoiceNo;
+
+ @ApiModelProperty("申报单位")
+ private String declareUnit;
+ @ApiModelProperty("申报数量(必填,大于0)")
+ private BigDecimal declareQuantity;
+ @ApiModelProperty("单价")
+ private BigDecimal unitPrice;
+
+ @ApiModelProperty("单位")
+ private String unit;
+ @ApiModelProperty("升")
+ private String liter;
+ @ApiModelProperty("尺寸")
+ private String size;
+ @ApiModelProperty("箱数")
+ private BigDecimal caseCount;
+ @ApiModelProperty("件数")
+ private BigDecimal pieceCount;
+ @ApiModelProperty("出库数量")
+ private BigDecimal outboundQuantity;
+ @ApiModelProperty("总净重(千克)")
+ private BigDecimal totalNetWeight;
+ @ApiModelProperty("总毛重(千克)")
+ private BigDecimal totalGrossWeight;
+ @ApiModelProperty("总体积(立方米)")
+ private BigDecimal totalVolume;
+ @ApiModelProperty("总面积")
+ private BigDecimal totalArea;
+ @ApiModelProperty("总金额")
+ private BigDecimal totalAmount;
+ @ApiModelProperty("币制")
+ private String currency;
+ @ApiModelProperty("批次")
+ private String batchRefNo;
+ @ApiModelProperty("单据参考号")
+ private String sheetRefNo;
+ @ApiModelProperty("原产国")
+ private String countryOfOrigin;
+ @ApiModelProperty("箱/托盘号")
+ private String boxPalletNo;
+
+ @ApiModelProperty("备注")
+ private String remark;
+}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/outEntrustOrder/OutEntrustOrderApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/outEntrustOrder/OutEntrustOrderApi.java
new file mode 100644
index 000000000..4f24f5cfe
--- /dev/null
+++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/outEntrustOrder/OutEntrustOrderApi.java
@@ -0,0 +1,111 @@
+package com.mhd.oms.interfaces.facade.outEntrustOrder;
+
+import com.mhd.common.core.web.controller.BaseController;
+import com.mhd.common.core.web.domain.AjaxResult;
+import com.mhd.common.core.web.page.TableDataInfo;
+import com.mhd.oms.application.service.outEntrustOrder.OutEntrustOrderApplicationService;
+import com.mhd.oms.domain.outEntrustOrder.repository.po.OutEntrustOrderPO;
+import com.mhd.oms.domain.outEntrustOrder.repository.todo.OutEntrustOrderDO;
+import com.mhd.oms.interfaces.assembler.outEntrustOrder.OutEntrustOrderAssembler;
+import com.mhd.oms.interfaces.dto.outEntrustOrder.OutEntrustOrderDTO;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * 出仓委托单Api
+ *
+ * @author rcx
+ * @date 2026-09-02
+ */
+@Slf4j
+@RestController
+@RequestMapping("/outEntrustOrderApi")
+public class OutEntrustOrderApi extends BaseController {
+
+ @Autowired
+ private OutEntrustOrderApplicationService outEntrustOrderApplicationService;
+
+ @Resource
+ private OutEntrustOrderAssembler outEntrustOrderAssembler;
+
+ /**
+ * 分页查询出仓委托单列表(显示全部数据,不做默认状态过滤)
+ */
+ @ApiOperation("查询出仓委托单列表")
+ @GetMapping("/list")
+ public TableDataInfo list(OutEntrustOrderDTO outEntrustOrderDTO) {
+ //转换实体
+ OutEntrustOrderDO outEntrustOrderDO = outEntrustOrderAssembler.toDO(outEntrustOrderDTO);
+ startPage();
+ List list = outEntrustOrderApplicationService.queryList(outEntrustOrderDO);
+ return getDataTable(list);
+ }
+
+ /**
+ * 新增/修改出仓委托单(必填:客户、业务员、仓库、商品名称、申报数量)
+ */
+ @ApiOperation("编辑出仓委托单")
+ @PostMapping("/edit")
+ public AjaxResult edit(@RequestBody OutEntrustOrderDTO outEntrustOrderDTO) {
+ //转换实体
+ OutEntrustOrderDO outEntrustOrderDO = outEntrustOrderAssembler.toDO(outEntrustOrderDTO);
+ if (outEntrustOrderDTO.getId() != null) {
+ return toAjax(outEntrustOrderApplicationService.update(outEntrustOrderDO));
+ } else {
+ return toAjax(outEntrustOrderApplicationService.insert(outEntrustOrderDO));
+ }
+ }
+
+ /**
+ * 批量删除出仓委托单(仅待审核/已驳回且未下发)
+ */
+ @ApiOperation("批量删除出仓委托单")
+ @DeleteMapping("/deleteByIds/{ids}")
+ public AjaxResult delete(@PathVariable Long[] ids) {
+ return toAjax(outEntrustOrderApplicationService.delete(ids));
+ }
+
+ /**
+ * 获取出仓委托单详情(含明细)
+ */
+ @ApiOperation("获取出仓委托单")
+ @GetMapping(value = "/getInfo/{id}")
+ public AjaxResult getInfo(@PathVariable("id") Long id) {
+ return AjaxResult.success(outEntrustOrderApplicationService.getInfo(id));
+ }
+
+ /**
+ * 批量审核:待审核/已驳回 → 已审核(通过)或已驳回
+ * 请求体:{"idList":[1,2],"orderStatus":3,"auditRemark":"备注"},orderStatus:2-审核通过 3-驳回(auditRemark选填)
+ */
+ @ApiOperation("审核出仓委托单")
+ @PostMapping("/audit")
+ public AjaxResult audit(@RequestBody OutEntrustOrderDTO outEntrustOrderDTO) {
+ return toAjax(outEntrustOrderApplicationService.audit(outEntrustOrderAssembler.toDO(outEntrustOrderDTO)));
+ }
+
+ /**
+ * 批量下发:已审核的委托单下发到WMS(生成出库通知单),下发后订单状态变为进行中
+ */
+ @ApiOperation("下发出仓委托单")
+ @PostMapping("/issueOrder")
+ public AjaxResult issueOrder(@RequestBody HashMap> body) {
+ List ids = body.get("ids");
+ return toAjax(outEntrustOrderApplicationService.issueOrder(ids));
+ }
+
+ /**
+ * 批量完成:进行中 → 已入库(WMS出库完成后人工确认)
+ */
+ @ApiOperation("委托单完成入库")
+ @PostMapping("/finish")
+ public AjaxResult finish(@RequestBody List ids) {
+ return toAjax(outEntrustOrderApplicationService.finish(ids));
+ }
+}
diff --git a/mhd_oms/src/main/resources/mapper/outEntrustOrder/OutEntrustOrderMapper.xml b/mhd_oms/src/main/resources/mapper/outEntrustOrder/OutEntrustOrderMapper.xml
new file mode 100644
index 000000000..d5a2017aa
--- /dev/null
+++ b/mhd_oms/src/main/resources/mapper/outEntrustOrder/OutEntrustOrderMapper.xml
@@ -0,0 +1,181 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select
+ a.id,a.create_by,a.create_by_name,a.create_time,a.update_by,a.update_by_name,a.update_time,a.del_flag,
+ a.entrust_number,a.warehouse_id,a.warehouse_code,a.warehouse_name,a.shipper_id,a.shipper_code,a.shipper_name,
+ a.salesman_id,a.salesman_name,a.order_type_code,a.order_type_name,a.settlement_currency,a.priority_level_code,a.priority_level_name,
+ a.direct_warehouse,a.review,a.expect_time,a.outbound_date,a.order_date,a.complete_time,
+ a.to_receiver,a.contact_person,a.vehicle_model_plate,a.entrust_no,a.tel,a.fax,a.driver_sign,
+ a.carrier,a.carrier_name,a.container_no,a.container_no_name,
+ a.transport_mode_code,a.transport_mode_name,a.supervision_mode_code,a.supervision_mode_name,
+ a.declare_customs,a.entry_exit_customs,a.departure_arrival_country,a.customs_inspection_flag,
+ a.need_declare_flag,a.need_transport_flag,a.manufacturer,a.customs_declarer_info,a.delivery_addr,a.annex_url,
+ a.order_status,a.audit_by,a.audit_by_name,a.audit_time,a.audit_remark,
+ a.issue_status,a.issue_by,a.issue_by_name,a.issue_time,a.declare_total_quantity,
+ a.remark,a.organization_id,a.organization_name,a.top_organization_id,
+ case a.order_status when 1 then '待审核' when 2 then '已审核' when 3 then '已驳回' when 4 then '进行中' when 5 then '已入库' else '未知状态' end order_status_str,
+ case a.issue_status when 1 then '未下发' when 2 then '已下发' else '未知状态' end issue_status_str
+ from
+ oms_out_entrust_order a
+
+
+
+
+ a.del_flag = 1
+
+ and a.entrust_number like concat('%', #{entrustNumber}, '%')
+
+
+ and a.entrust_no like concat('%', #{entrustNo}, '%')
+
+
+ and a.warehouse_id = #{warehouseId}
+
+
+ and a.warehouse_name like concat('%', #{warehouseName}, '%')
+
+
+ and a.shipper_id = #{shipperId}
+
+
+ and a.shipper_name like concat('%', #{shipperName}, '%')
+
+
+ and a.salesman_id = #{salesmanId}
+
+
+ and a.salesman_name like concat('%', #{salesmanName}, '%')
+
+
+ and a.container_no like concat('%', #{containerNo}, '%')
+
+
+ and a.order_status = #{orderStatus}
+
+
+ and a.issue_status = #{issueStatus}
+
+
+ and a.settlement_currency = #{settlementCurrency}
+
+
+ and exists (
+ select 1 from oms_out_entrust_order_detail d
+ where d.entrust_number = a.entrust_number
+ and d.del_flag = 1
+ and d.invoice_no like concat('%', #{invoiceNo}, '%')
+ )
+
+
+ and a.top_organization_id = #{topOrganizationId}
+
+
+ and a.create_time >= #{beginCreateTime}
+
+
+ and a.create_time <= #{endCreateTime}
+
+
+ and a.id in
+
+ #{id}
+
+
+
+ order by a.create_time desc
+
+
+
+
+
+
+
+
+
+
+ a.del_flag = 1
+ and a.id in
+
+ #{id}
+
+
+
+
+
diff --git a/sql/20260903_create_table_dm_szwl_oms_out_entrust_order.sql b/sql/20260903_create_table_dm_szwl_oms_out_entrust_order.sql
new file mode 100644
index 000000000..c336f89e8
--- /dev/null
+++ b/sql/20260903_create_table_dm_szwl_oms_out_entrust_order.sql
@@ -0,0 +1,230 @@
+-- ----------------------------
+-- 通宇「出仓委托单」OMS 建表脚本 —— 达梦(DM)数据库版(最终版,新库直接执行本脚本即可,无需任何增量)
+-- 适用:mhd-oms-service 连接的达梦库(生产/测试按环境选择,在OMS服务连接的用户/模式下执行)
+-- 含:明细单价UNIT_PRICE、结算币种、审核备注、订单状态(1-待审核 2-已审核 3-已驳回 4-进行中(预留) 5-已入库,默认1待审核)
+-- @date 2026-09-03
+-- ----------------------------
+
+-- 主表:出仓委托单
+CREATE TABLE OMS_OUT_ENTRUST_ORDER (
+ ID BIGINT IDENTITY(1,1) NOT NULL,
+ ENTRUST_NUMBER VARCHAR(50) DEFAULT NULL,
+ WAREHOUSE_ID BIGINT DEFAULT NULL,
+ WAREHOUSE_CODE VARCHAR(50) DEFAULT NULL,
+ WAREHOUSE_NAME VARCHAR(100) DEFAULT NULL,
+ SHIPPER_ID BIGINT DEFAULT NULL,
+ SHIPPER_CODE VARCHAR(50) DEFAULT NULL,
+ SHIPPER_NAME VARCHAR(100) DEFAULT NULL,
+ SALESMAN_ID VARCHAR(64) DEFAULT NULL,
+ SALESMAN_NAME VARCHAR(50) DEFAULT NULL,
+ ORDER_TYPE_CODE VARCHAR(50) DEFAULT NULL,
+ ORDER_TYPE_NAME VARCHAR(100) DEFAULT NULL,
+ SETTLEMENT_CURRENCY VARCHAR(50) DEFAULT NULL,
+ PRIORITY_LEVEL_CODE VARCHAR(50) DEFAULT NULL,
+ PRIORITY_LEVEL_NAME VARCHAR(50) DEFAULT NULL,
+ DIRECT_WAREHOUSE INT DEFAULT NULL,
+ REVIEW INT DEFAULT NULL,
+ EXPECT_TIME DATETIME DEFAULT NULL,
+ OUTBOUND_DATE DATETIME DEFAULT NULL,
+ ORDER_DATE DATETIME DEFAULT NULL,
+ COMPLETE_TIME DATETIME DEFAULT NULL,
+ TO_RECEIVER VARCHAR(200) DEFAULT NULL,
+ CONTACT_PERSON VARCHAR(100) DEFAULT NULL,
+ VEHICLE_MODEL_PLATE VARCHAR(100) DEFAULT NULL,
+ ENTRUST_NO VARCHAR(100) DEFAULT NULL,
+ TEL VARCHAR(50) DEFAULT NULL,
+ FAX VARCHAR(50) DEFAULT NULL,
+ DRIVER_SIGN VARCHAR(100) DEFAULT NULL,
+ CARRIER VARCHAR(100) DEFAULT NULL,
+ CARRIER_NAME VARCHAR(200) DEFAULT NULL,
+ CONTAINER_NO VARCHAR(100) DEFAULT NULL,
+ CONTAINER_NO_NAME VARCHAR(50) DEFAULT NULL,
+ TRANSPORT_MODE_CODE VARCHAR(50) DEFAULT NULL,
+ TRANSPORT_MODE_NAME VARCHAR(50) DEFAULT NULL,
+ SUPERVISION_MODE_CODE VARCHAR(50) DEFAULT NULL,
+ SUPERVISION_MODE_NAME VARCHAR(50) DEFAULT NULL,
+ DECLARE_CUSTOMS VARCHAR(100) DEFAULT NULL,
+ ENTRY_EXIT_CUSTOMS VARCHAR(100) DEFAULT NULL,
+ DEPARTURE_ARRIVAL_COUNTRY VARCHAR(100) DEFAULT NULL,
+ CUSTOMS_INSPECTION_FLAG VARCHAR(50) DEFAULT NULL,
+ NEED_DECLARE_FLAG VARCHAR(50) DEFAULT NULL,
+ NEED_TRANSPORT_FLAG VARCHAR(50) DEFAULT NULL,
+ MANUFACTURER VARCHAR(200) DEFAULT NULL,
+ CUSTOMS_DECLARER_INFO VARCHAR(200) DEFAULT NULL,
+ DELIVERY_ADDR VARCHAR(500) DEFAULT NULL,
+ ANNEX_URL VARCHAR(500) DEFAULT NULL,
+ ORDER_STATUS INT DEFAULT 1,
+ AUDIT_BY BIGINT DEFAULT NULL,
+ AUDIT_BY_NAME VARCHAR(50) DEFAULT NULL,
+ AUDIT_TIME DATETIME DEFAULT NULL,
+ AUDIT_REMARK VARCHAR(500) DEFAULT NULL,
+ ISSUE_STATUS INT DEFAULT 1,
+ ISSUE_BY BIGINT DEFAULT NULL,
+ ISSUE_BY_NAME VARCHAR(50) DEFAULT NULL,
+ ISSUE_TIME DATETIME DEFAULT NULL,
+ DECLARE_TOTAL_QUANTITY DECIMAL(24,6) DEFAULT 0,
+ REMARK VARCHAR(500) DEFAULT NULL,
+ ORGANIZATION_ID BIGINT DEFAULT NULL,
+ ORGANIZATION_NAME VARCHAR(100) DEFAULT NULL,
+ TOP_ORGANIZATION_ID BIGINT DEFAULT NULL,
+ CREATE_BY BIGINT DEFAULT NULL,
+ CREATE_BY_NAME VARCHAR(50) DEFAULT NULL,
+ CREATE_TIME DATETIME DEFAULT NULL,
+ UPDATE_BY BIGINT DEFAULT NULL,
+ UPDATE_BY_NAME VARCHAR(50) DEFAULT NULL,
+ UPDATE_TIME DATETIME DEFAULT NULL,
+ DEL_FLAG INT DEFAULT 1,
+ CONSTRAINT PK_OMS_OUT_ENTRUST_ORDER PRIMARY KEY (ID)
+);
+
+COMMENT ON TABLE OMS_OUT_ENTRUST_ORDER IS '出仓委托单主表';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.ID IS '编号';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.ENTRUST_NUMBER IS '委托单号';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.WAREHOUSE_ID IS '出库仓库ID(必填)';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.WAREHOUSE_CODE IS '仓库编码';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.WAREHOUSE_NAME IS '仓库名称';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.SHIPPER_ID IS '客户ID(货主,必填)';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.SHIPPER_CODE IS '客户编码';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.SHIPPER_NAME IS '客户名称';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.SALESMAN_ID IS '业务员ID(必填)';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.SALESMAN_NAME IS '业务员名称';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.ORDER_TYPE_CODE IS '订单类型编码(字典outDocumentType,为空时下发默认普通出库)';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.ORDER_TYPE_NAME IS '订单类型名称';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.SETTLEMENT_CURRENCY IS '结算币种';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.PRIORITY_LEVEL_CODE IS '优先级别编码';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.PRIORITY_LEVEL_NAME IS '优先级别名称';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.DIRECT_WAREHOUSE IS '是否直接出库: 1-是 2-否';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.REVIEW IS '是否复核: 1-是 2-否';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.EXPECT_TIME IS '预计出货时间';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.OUTBOUND_DATE IS '出仓日期';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.ORDER_DATE IS 'orderDate';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.COMPLETE_TIME IS '完成时间';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.TO_RECEIVER IS 'To(收货人)';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.CONTACT_PERSON IS '联系人';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.VEHICLE_MODEL_PLATE IS '车型及车牌';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.ENTRUST_NO IS '委托编号(客户委托单号)';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.TEL IS 'Tel电话';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.FAX IS 'Fax传真';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.DRIVER_SIGN IS '司机签名';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.CARRIER IS '承运商编码';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.CARRIER_NAME IS '承运商名称';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.CONTAINER_NO IS '柜号';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.CONTAINER_NO_NAME IS '柜';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.TRANSPORT_MODE_CODE IS '运输方式编码';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.TRANSPORT_MODE_NAME IS '运输方式名称';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.SUPERVISION_MODE_CODE IS '监管方式编码';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.SUPERVISION_MODE_NAME IS '监管方式名称';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.DECLARE_CUSTOMS IS '申报地关区';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.ENTRY_EXIT_CUSTOMS IS '进出境关别';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.DEPARTURE_ARRIVAL_COUNTRY IS '起运/运抵国(地区)';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.CUSTOMS_INSPECTION_FLAG IS '海关是否查验货物';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.NEED_DECLARE_FLAG IS '是否需要报关(预留,页面隐藏)';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.NEED_TRANSPORT_FLAG IS '是否需要运输(预留,页面隐藏)';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.MANUFACTURER IS '生产商';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.CUSTOMS_DECLARER_INFO IS '报关员姓名及联系方式';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.DELIVERY_ADDR IS '送货地址';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.ANNEX_URL IS '附件url';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.ORDER_STATUS IS '订单状态:1-待审核 2-已审核(含已下发) 3-已驳回 4-进行中(预留) 5-已入库';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.AUDIT_BY IS '审核人ID';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.AUDIT_BY_NAME IS '审核人姓名';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.AUDIT_TIME IS '审核时间';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.AUDIT_REMARK IS '审核备注(驳回原因)';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.ISSUE_STATUS IS '下发状态:1-未下发 2-已下发';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.ISSUE_BY IS '下发人ID';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.ISSUE_BY_NAME IS '下发人姓名';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.ISSUE_TIME IS '下发时间';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.DECLARE_TOTAL_QUANTITY IS '申报总数量(明细申报数量之和)';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.REMARK IS '备注';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.ORGANIZATION_ID IS '组织ID';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.ORGANIZATION_NAME IS '组织名称';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.TOP_ORGANIZATION_ID IS '一级组织ID';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER.DEL_FLAG IS '删除标记:0-无状态,1-正常,2-已删除';
+
+CREATE INDEX IDX_OOE_ENTRUST_NUMBER ON OMS_OUT_ENTRUST_ORDER (ENTRUST_NUMBER);
+CREATE INDEX IDX_OOE_TOP_ORG ON OMS_OUT_ENTRUST_ORDER (TOP_ORGANIZATION_ID);
+
+-- 明细表:出仓委托单明细
+CREATE TABLE OMS_OUT_ENTRUST_ORDER_DETAIL (
+ ID BIGINT IDENTITY(1,1) NOT NULL,
+ ENTRUST_NUMBER VARCHAR(50) DEFAULT NULL,
+ MATERIAL_BASE_INFO_ID BIGINT DEFAULT NULL,
+ MATERIAL_CODE VARCHAR(100) DEFAULT NULL,
+ MATERIAL_NAME VARCHAR(200) DEFAULT NULL,
+ BAR_CODE VARCHAR(100) DEFAULT NULL,
+ COMMODITY_NAME VARCHAR(200) DEFAULT NULL,
+ COMMODITY_NO VARCHAR(100) DEFAULT NULL,
+ MATERIAL_NO VARCHAR(100) DEFAULT NULL,
+ SPECIFICATION_MODEL VARCHAR(200) DEFAULT NULL,
+ SKUCODE VARCHAR(100) DEFAULT NULL,
+ INVOICE_NO VARCHAR(200) DEFAULT NULL,
+ DECLARE_UNIT VARCHAR(50) DEFAULT NULL,
+ DECLARE_QUANTITY DECIMAL(24,6) DEFAULT NULL,
+ UNIT_PRICE DECIMAL(24,6) DEFAULT NULL,
+ UNIT VARCHAR(50) DEFAULT NULL,
+ LITER VARCHAR(50) DEFAULT NULL,
+ "SIZE" VARCHAR(100) DEFAULT NULL,
+ CASE_COUNT DECIMAL(24,6) DEFAULT NULL,
+ PIECE_COUNT DECIMAL(24,6) DEFAULT NULL,
+ OUTBOUND_QUANTITY DECIMAL(24,6) DEFAULT NULL,
+ TOTAL_NET_WEIGHT DECIMAL(24,6) DEFAULT NULL,
+ TOTAL_GROSS_WEIGHT DECIMAL(24,6) DEFAULT NULL,
+ TOTAL_VOLUME DECIMAL(24,6) DEFAULT NULL,
+ TOTAL_AREA DECIMAL(24,6) DEFAULT NULL,
+ TOTAL_AMOUNT DECIMAL(24,6) DEFAULT NULL,
+ CURRENCY VARCHAR(50) DEFAULT NULL,
+ BATCH_REF_NO VARCHAR(100) DEFAULT NULL,
+ SHEET_REF_NO VARCHAR(100) DEFAULT NULL,
+ COUNTRY_OF_ORIGIN VARCHAR(100) DEFAULT NULL,
+ BOX_PALLET_NO VARCHAR(100) DEFAULT NULL,
+ REMARK VARCHAR(500) DEFAULT NULL,
+ CREATE_BY BIGINT DEFAULT NULL,
+ CREATE_BY_NAME VARCHAR(50) DEFAULT NULL,
+ CREATE_TIME DATETIME DEFAULT NULL,
+ UPDATE_BY BIGINT DEFAULT NULL,
+ UPDATE_BY_NAME VARCHAR(50) DEFAULT NULL,
+ UPDATE_TIME DATETIME DEFAULT NULL,
+ DEL_FLAG INT DEFAULT 1,
+ CONSTRAINT PK_OMS_OUT_ENTRUST_ORDER_DETAIL PRIMARY KEY (ID)
+);
+
+COMMENT ON TABLE OMS_OUT_ENTRUST_ORDER_DETAIL IS '出仓委托单明细表';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.ID IS '编号';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.ENTRUST_NUMBER IS '委托单号(关联主表)';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.MATERIAL_BASE_INFO_ID IS '物料基础信息ID';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.MATERIAL_CODE IS '商品编码';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.MATERIAL_NAME IS '商品名称(物料档案名,与COMMODITY_NAME至少其一)';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.BAR_CODE IS '商品条形码';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.COMMODITY_NAME IS '商品名称(委托单品名,与MATERIAL_NAME至少其一)';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.COMMODITY_NO IS '商品编号';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.MATERIAL_NO IS '料号';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.SPECIFICATION_MODEL IS '规格型号';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.SKUCODE IS 'SKU码';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.INVOICE_NO IS '发票号';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.DECLARE_UNIT IS '申报单位';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.DECLARE_QUANTITY IS '申报数量(必填,大于0)';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.UNIT_PRICE IS '单价';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.UNIT IS '单位';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.LITER IS '升';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL."SIZE" IS '尺寸';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.CASE_COUNT IS '箱数';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.PIECE_COUNT IS '件数';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.OUTBOUND_QUANTITY IS '出库数量';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.TOTAL_NET_WEIGHT IS '总净重(千克)';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.TOTAL_GROSS_WEIGHT IS '总毛重(千克)';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.TOTAL_VOLUME IS '总体积(立方米)';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.TOTAL_AREA IS '总面积';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.TOTAL_AMOUNT IS '总金额';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.CURRENCY IS '币制';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.BATCH_REF_NO IS '批次';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.SHEET_REF_NO IS '单据参考号';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.COUNTRY_OF_ORIGIN IS '原产国';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.BOX_PALLET_NO IS '箱/托盘号';
+COMMENT ON COLUMN OMS_OUT_ENTRUST_ORDER_DETAIL.DEL_FLAG IS '删除标记:0-无状态,1-正常,2-已删除';
+
+CREATE INDEX IDX_OOED_ENTRUST_NUMBER ON OMS_OUT_ENTRUST_ORDER_DETAIL (ENTRUST_NUMBER);
+
+-- ----------------------------
+-- 回滚脚本
+-- DROP TABLE OMS_OUT_ENTRUST_ORDER_DETAIL;
+-- DROP TABLE OMS_OUT_ENTRUST_ORDER;
+-- ----------------------------
From ce3bb036fae9d96192e796a9d72cac4cb46c0f35 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Fri, 4 Sep 2026 10:50:48 +0800
Subject: [PATCH 77/87] =?UTF-8?q?=E5=8F=91=20=E6=B5=8B=E8=AF=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/com/mhd/system/api/BmsServiceFeign.java | 2 +-
.../java/com/mhd/system/api/OmsServiceFeign.java | 2 +-
.../java/com/mhd/system/api/WlhyServiceFeign.java | 2 +-
.../java/com/mhd/system/api/WmsServiceFeign.java | 2 +-
.../java/com/mhd/system/api/YmsServiceFeign.java | 2 +-
.../common/core/feign/ThirdPartyServiceFeign.java | 2 +-
mhd_bms/src/main/resources/bootstrap.yml | 14 ++++++++------
.../feign/ThirdPartyServiceFeign.java | 2 +-
mhd_oms/src/main/resources/bootstrap.yml | 8 ++++----
9 files changed, 19 insertions(+), 17 deletions(-)
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
index 8cc8bfd57..0d65c89a1 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
@@ -18,7 +18,7 @@ import java.util.Set;
/**
* bms财务结算系统feign调用接口
*/
-@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.32:8019",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.33.0.129:8012",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface BmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
index 4ef3bed80..8a7006304 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.concurrent.CompletableFuture;
-@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.33:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.33.0.99:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface OmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
index d976fcc98..ba9a45148 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
@@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
-@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.102.192.31:8014",configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.33.0.129:8014",configuration = FeignAutoConfiguration.class)
public interface WlhyServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
index 1fe69a003..7fbd7dd9b 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
@@ -21,7 +21,7 @@ import java.util.Map;
* @description: TODO
* @date 2024/5/10 8:58
**/
-@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.32:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.33.0.109:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface WmsServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
index 750ed853e..beba5b1af 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
@@ -9,7 +9,7 @@ import com.mhd.system.api.feign.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
-@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.33:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.33.0.99:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface YmsServiceFeign {
/**
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
index 509644885..9fd21ae67 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
@@ -26,7 +26,7 @@ import java.io.InputStream;
import java.util.List;
import java.util.Map;
-@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.31:8012", configuration = FeignAutoConfiguration.class)
+@FeignClient(value = "mhd-third-party-service",url = "http://10.33.0.129:8012",configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_bms/src/main/resources/bootstrap.yml b/mhd_bms/src/main/resources/bootstrap.yml
index 72c069a36..57159b97e 100644
--- a/mhd_bms/src/main/resources/bootstrap.yml
+++ b/mhd_bms/src/main/resources/bootstrap.yml
@@ -16,15 +16,17 @@ spring:
cloud:
nacos:
discovery:
- server-addr: 127.0.0.1:8848
-# server-addr: 10.33.0.129:6010
-# server-addr: 10.102.192.31:6848
+# server-addr: 127.0.0.1:8848
+ # 线上测试环境配置 容器名+端口号
+ server-addr: 10.33.0.129:6010
+# server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
config:
- server-addr: 127.0.0.1:8848
-# server-addr: 10.33.0.129:6010
-# server-addr: 10.102.192.31:6848
+# server-addr: 127.0.0.1:8848
+ # 线上测试环境配置 容器名+端口号
+ server-addr: 10.33.0.129:6010
+# server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
group: DEFAULT_GROUP # 默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置
diff --git a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
index 8c86ae1ad..376500b1c 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
@@ -22,7 +22,7 @@ import java.util.Map;
/**
* 三方服务 Feign
*/
-@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.31:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.33.0.129:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/resources/bootstrap.yml b/mhd_oms/src/main/resources/bootstrap.yml
index 542b6bce7..88471e390 100644
--- a/mhd_oms/src/main/resources/bootstrap.yml
+++ b/mhd_oms/src/main/resources/bootstrap.yml
@@ -18,15 +18,15 @@ spring:
discovery:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
-# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.31:6848
+ server-addr: 10.33.0.129:6010
+# server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
config:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
-# server-addr: 10.33.0.129:6010
- server-addr: 10.102.192.31:6848
+ server-addr: 10.33.0.129:6010
+# server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From 1b8511c09267d048887526951a44a9da993aa174 Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Fri, 4 Sep 2026 10:55:18 +0800
Subject: [PATCH 78/87] =?UTF-8?q?feat(oms):=20=E5=87=BA=E5=BA=93/=E5=85=A5?=
=?UTF-8?q?=E5=BA=93=E4=B8=9A=E5=8A=A1=E5=8D=95=E5=AF=BC=E5=85=A5=E6=94=AF?=
=?UTF-8?q?=E6=8C=81=E5=A4=9A=E9=A1=B5=E7=AD=BE=E2=80=94=E2=80=94=E6=AF=8F?=
=?UTF-8?q?=E4=B8=AA=E5=B7=A5=E4=BD=9C=E8=A1=A8=E7=8B=AC=E7=AB=8B=E7=94=9F?=
=?UTF-8?q?=E6=88=90=E4=B8=80=E5=BC=A0=E5=8D=95=E6=8D=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
一、行为变更(ReservationStockInOrderImpl)
- 出库导入(parseExcelFile)/入库导入(parseStockInExcel):不再固定读单一页签,枚举Excel全部工作表,每个页签独立解析为一张单据(5个页签=5张单5个单号)
- 全部回滚策略:任一页签校验失败整体不落库,报错按页签聚合列出(页签[x]:原因;页签[y]:原因)
- 空页签(无货品/客户明细)自动跳过;单页签文件行为与原先完全一致
- 出库单号改到落库阶段逐张生成:多页签下校验阶段统一生成会因全部未入库而取到相同单号
- 入库模板OrderNO增加本文件内跨页签查重:各页签都未入库时库查重互相不可见,防两页签同OrderNO重复落库
- 页签解析异常message为空时兜底用异常类名,避免报错显示null
- 方法级@Transactional(rollbackFor=Exception.class):顺带修复旧入库导入因this自调用导致事务代理失效的问题
二、接口与返回结构(IReservationStockInOrderService / ReservationStockInOrderApi)
- 两个导入方法返回类型改为List(每页签一条:页签名/单号/物料行数/数量合计/解析数据)
- /parseExcel与/parse-excel返回:result=第一个页签解析数据(兼容老前端)、results=全部页签结果、msg=成功导入N张单:单号1、单号2…
- 入库接口不传sheetName为多页签模式,显式传页签名保持单页签老行为
---
.../IReservationStockInOrderService.java | 19 +-
.../ReservationStockInOrderImpl.java | 222 +++++++++++++++---
.../repository/vo/SheetImportResultDTO.java | 31 +++
.../ReservationStockInOrderApi.java | 28 ++-
4 files changed, 255 insertions(+), 45 deletions(-)
create mode 100644 mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/vo/SheetImportResultDTO.java
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/facade/IReservationStockInOrderService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/facade/IReservationStockInOrderService.java
index d2963405b..97435b85f 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/facade/IReservationStockInOrderService.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/facade/IReservationStockInOrderService.java
@@ -6,6 +6,7 @@ import com.mhd.oms.domain.reservationStockInOrder.entity.ReservationStockInOrder
import com.mhd.oms.domain.reservationStockInOrder.repository.po.ReservationStockInOrderPO;
import com.mhd.oms.domain.reservationStockInOrder.repository.todo.ReservationStockInOrderDO;
import com.mhd.oms.domain.reservationStockInOrder.repository.vo.DeliveryDataDTO;
+import com.mhd.oms.domain.reservationStockInOrder.repository.vo.SheetImportResultDTO;
import com.mhd.oms.domain.reservationStockInOrder.repository.vo.StockInDataDTO;
import org.springframework.web.multipart.MultipartFile;
@@ -50,21 +51,23 @@ public interface IReservationStockInOrderService extends IService queryNoticePrintDetail(ReservationStockInOrderDO stockInOrderDTO);
/**
- * 解析Excel文件并获取出库数据
+ * 解析Excel文件并导入出库单(多页签:文件中每个工作表独立解析为一张出库单,单页签文件行为不变)。
+ * 任一页签校验失败则整体不落库,报错聚合列出所有失败页签
* @param file Excel文件
- * @param sheetName 工作表名称(出库导入/参考数据)
+ * @param sheetName 兼容参数(多页签模式下不再按名字筛选,传空即可)
* @param warehouseId 当前仓库id(非空时校验导入物料是否属于该仓库,并按该仓库过滤批次库存)
- * @return 出库数据DTO
+ * @return 每个工作表的导入结果(含生成的出库单号与解析数据)
* @throws Exception 解析异常
*/
- DeliveryDataDTO parseExcelFile(MultipartFile file, String sheetName, Long warehouseId) throws Exception;
+ List parseExcelFile(MultipartFile file, String sheetName, Long warehouseId) throws Exception;
/**
- * 解析入库单Excel文件
+ * 解析并导入入库单Excel(多页签:未指定页签名时文件中每个工作表独立解析为一张入库单,单页签文件行为不变)。
+ * 任一页签校验失败则整体不落库,报错聚合列出所有失败页签
* @param file Excel文件
- * @param sheetName 工作表名称(默认:入库模版)
- * @return 入库单完整数据(表头+明细)
+ * @param sheetName 显式指定页签时保持单页签行为;不传/为空则为多页签模式
+ * @return 每个工作表的导入结果(含生成的入库单号与解析数据)
* @throws Exception 解析异常
*/
- StockInDataDTO parseStockInExcel(MultipartFile file, String sheetName) throws Exception;
+ List parseStockInExcel(MultipartFile file, String sheetName) throws Exception;
}
\ No newline at end of file
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java
index 21ed397d6..c1a474c7a 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockInOrder/repository/persistence/ReservationStockInOrderImpl.java
@@ -4,6 +4,8 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelReader;
+import com.alibaba.excel.read.metadata.ReadSheet;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -57,6 +59,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
+import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
@@ -220,19 +223,90 @@ public class ReservationStockInOrderImpl extends ServiceImpl parseExcelFile(MultipartFile file, String sheetName, Long warehouseId) throws Exception {
LoginUser loginUser = SecurityUtils.getLoginUser();
- // 校验文件和工作表名称(逻辑不变)
+ // 校验文件(逻辑不变)
if (file.isEmpty()) {
throw new IllegalArgumentException("上传的Excel文件不能为空");
}
- if (!"出库导入".equals(sheetName) && !"参考数据".equals(sheetName)) {
- sheetName = "出库导入";
+ // 多页签模式:文件中每个工作表独立解析为一张出库单(老逻辑固定只读"出库导入"页签)
+ byte[] fileBytes = file.getBytes();
+ List sheetNames = listSheetNames(fileBytes);
+ if (sheetNames.isEmpty()) {
+ throw new IllegalArgumentException("Excel文件中没有工作表");
}
+ // ====== 第一阶段:逐页签解析+校验+组装(不落库),失败按页签聚合收集,全部页签处理完统一报错 ======
+ List preparedOrders = new ArrayList<>();
+ List sheetProblems = new ArrayList<>();
+ for (String name : sheetNames) {
+ try {
+ PreparedDeliveryOrder prepared = buildDeliveryOrder(fileBytes, name, warehouseId, loginUser);
+ if (prepared != null) {
+ preparedOrders.add(prepared); // null=空页签,跳过
+ }
+ } catch (Exception e) {
+ // 非模板页签的解析异常(如NPE)message 可能为空,兜底用异常类名,避免报错显示"页签[x]:null"
+ sheetProblems.add("页签[" + name + "]:" + (e.getMessage() == null ? e.toString() : e.getMessage()));
+ }
+ }
+ if (!sheetProblems.isEmpty()) {
+ throw new Exception(String.join(";", sheetProblems));
+ }
+ if (preparedOrders.isEmpty()) {
+ throw new IllegalArgumentException("Excel中没有可导入的数据页签");
+ }
+ // ====== 第二阶段:全部页签校验通过后统一落库(同一事务,任一失败整体回滚) ======
+ List results = new ArrayList<>();
+ for (PreparedDeliveryOrder prepared : preparedOrders) {
+ // 出库单号在落库阶段逐张生成:此时上一张已入库(同事务内可见),取号递增不会重复;
+ // 校验阶段统一生成会因全部页签都未入库而取到相同号
+ String orderNumber = reservationStockOutOrderApplicationService.generateReserveOrderNumber();
+ ReservationStockOutOrderDO order = prepared.order;
+ order.setOutOrderNumber(orderNumber);
+ order.setBusinessOrderNo(orderNumber);
+ if (order.getMaterialDetailList() != null) {
+ for (ReservationOutMaterialDetailDO detail : order.getMaterialDetailList()) {
+ detail.setOutOrderNumber(orderNumber);
+ }
+ }
+ reservationStockOutOrderApplicationService.insert(order);
+ saveDeliveryLinks(prepared);
+ prepared.result.setOrderNumber(orderNumber);
+ results.add(prepared.result);
+ }
+ return results;
+ }
+ /**
+ * 枚举Excel全部工作表名(EasyExcel 3.x:excelExecutor().sheetList())
+ */
+ private List listSheetNames(byte[] fileBytes) {
+ List sheetNames = new ArrayList<>();
+ try (ExcelReader reader = EasyExcel.read(new ByteArrayInputStream(fileBytes)).build()) {
+ for (ReadSheet readSheet : reader.excelExecutor().sheetList()) {
+ sheetNames.add(readSheet.getSheetName());
+ }
+ }
+ return sheetNames;
+ }
+
+ /** 出库单页签解析/校验/组装完成后的暂存容器(统一落库阶段使用) */
+ private static class PreparedDeliveryOrder {
+ ReservationStockOutOrderDO order;
+ List customerDeliveryDetailList;
+ Map customerCache;
+ SheetImportResultDTO result;
+ }
+
+ /**
+ * 单个页签的出库单解析+校验+组装(不落库,由调用方在全部页签通过后统一插入)。
+ * 空页签(货品明细与客户配送明细均为空)返回 null 由调用方跳过。
+ */
+ private PreparedDeliveryOrder buildDeliveryOrder(byte[] fileBytes, String sheetName, Long warehouseId, LoginUser loginUser) throws Exception {
// 关键变更:使用动态行数监听器
DynamicDeliveryExcelListener listener = new DynamicDeliveryExcelListener();
- try (InputStream inputStream = file.getInputStream()) {
+ try (InputStream inputStream = new ByteArrayInputStream(fileBytes)) {
EasyExcel.read(inputStream, listener)
.sheet(sheetName)
.headRowNumber(0) // 无固定表头,全部行交由监听器处理
@@ -254,8 +328,17 @@ public class ReservationStockInOrderImpl extends ServiceImpl> shipperIds = new ArrayList<>();
Set processedShipperIds = new HashSet<>();
@@ -356,10 +439,8 @@ public class ReservationStockInOrderImpl extends ServiceImpl customerCache = prepared.customerCache;
// 客户配送明细判空处理:为空时跳过关联保存
- for (CustomerDeliveryDetail customerDeliveryDetail : customerDeliveryDetailList) {
+ for (CustomerDeliveryDetail customerDeliveryDetail : prepared.customerDeliveryDetailList) {
ReservationDeliveryDetailsLink reservationDeliveryDetailsLink = new ReservationDeliveryDetailsLink();
reservationDeliveryDetailsLink.setInvoiceNumber(customerDeliveryDetail.getInvoiceNo());
reservationDeliveryDetailsLink.setAmount(customerDeliveryDetail.getAmount());
@@ -507,7 +609,6 @@ public class ReservationStockInOrderImpl extends ServiceImpl parseStockInExcel(MultipartFile file, String sheetName) throws Exception {
LoginUser loginUser = SecurityUtils.getLoginUser();
// 1. 校验文件
if (file.isEmpty()) {
@@ -537,29 +637,78 @@ public class ReservationStockInOrderImpl extends ServiceImpl sheetNames;
+ if (sheetName != null && !sheetName.trim().isEmpty()) {
+ sheetNames = Collections.singletonList(sheetName.trim());
+ } else {
+ sheetNames = listSheetNames(fileBytes);
+ }
- // 3. 使用EasyExcel解析(指定监听器)
+ // ====== 第一阶段:逐页签解析+校验+组装(不落库),失败按页签聚合收集,全部页签处理完统一报错 ======
+ List preparedOrders = new ArrayList<>();
+ List sheetProblems = new ArrayList<>();
+ // 本文件内已使用的模板OrderNO:各页签都未入库时 existsByBusinessOrderNo 查不到彼此,需按页签追加查重防跨页签重复
+ Set usedBusinessOrderNos = new HashSet<>();
+ for (String name : sheetNames) {
+ try {
+ PreparedStockInOrder prepared = buildStockInOrder(fileBytes, name, loginUser, usedBusinessOrderNos);
+ if (prepared != null) {
+ preparedOrders.add(prepared); // null=空页签,跳过
+ }
+ } catch (Exception e) {
+ sheetProblems.add("页签[" + name + "]:" + (e.getMessage() == null ? e.toString() : e.getMessage()));
+ }
+ }
+ if (!sheetProblems.isEmpty()) {
+ throw new Exception(String.join(";", sheetProblems));
+ }
+ if (preparedOrders.isEmpty()) {
+ throw new IllegalArgumentException("未解析到产品明细数据,请检查模板中是否填写了產品編號");
+ }
+
+ // ====== 第二阶段:全部页签校验通过后统一落库(同一事务,任一失败整体回滚) ======
+ List results = new ArrayList<>();
+ for (PreparedStockInOrder prepared : preparedOrders) {
+ insertApplication(prepared.order);
+ // 入库单号在落库阶段生成(insertDomain),回填到页签结果
+ prepared.result.setOrderNumber(prepared.order.getInOrderNumber());
+ results.add(prepared.result);
+ }
+ return results;
+ }
+
+ /** 入库单页签解析/校验/组装完成后的暂存容器(统一落库阶段使用) */
+ private static class PreparedStockInOrder {
+ ReservationStockInOrderDO order;
+ SheetImportResultDTO result;
+ }
+
+ /**
+ * 单个页签的入库单解析+校验+组装(不落库,由调用方在全部页签通过后统一插入)。
+ * 空页签(未解析到产品明细)返回 null 由调用方跳过。
+ */
+ private PreparedStockInOrder buildStockInOrder(byte[] fileBytes, String sheetName, LoginUser loginUser, Set usedBusinessOrderNos) throws Exception {
+ // 3. 使用EasyExcel解析(指定监听器,多页签模式下 sheetName 为实际页签名)
StockInExcelListener listener = new StockInExcelListener();
- try (InputStream inputStream = file.getInputStream()) {
+ try (InputStream inputStream = new ByteArrayInputStream(fileBytes)) {
EasyExcel.read(inputStream, listener)
- .sheet(targetSheetName) // 指定工作表
+ .sheet(sheetName) // 指定工作表
.headRowNumber(0) // 从第1行开始解析(不跳过任何行)
.doRead();
}
- // 4. 封装DTO返回
+ // 4. 封装DTO
StockInDataDTO resultDTO = new StockInDataDTO();
resultDTO.setStockInHeader(listener.getStockInHeader());
resultDTO.setProductDetailList(listener.getProductDetailList());
- LOGGER.info("Excel解析成功,工作表:{},产品明细数:{}",
- targetSheetName, resultDTO.getProductDetailList().size());
+ LOGGER.info("页签[{}]解析成功,产品明细数:{}", sheetName, resultDTO.getProductDetailList().size());
List productDetailList = resultDTO.getProductDetailList();
+ // 空页签跳过:该页签未解析到产品明细时视为非数据页签(说明页/空表),不算失败
if (productDetailList == null || productDetailList.isEmpty()) {
- throw new ServiceException("未解析到产品明细数据,请检查模板中是否填写了產品編號");
+ return null;
}
StockInHeader stockInHeader = resultDTO.getStockInHeader();
// ====== 第一步:物料编号存在性校验(模板只填物料编号即可,名称按编号自动匹配) ======
@@ -664,6 +813,10 @@ public class ReservationStockInOrderImpl extends ServiceImpl 0) {
throw new ServiceException("业务单号已存在:" + templateOrderNo + ",请修改模板中的OrderNO后重新导入");
}
+ // 多页签查重:各页签都未入库时上面的库查重互相看不见,需对本文件内已使用的OrderNO追加拦截
+ if (!usedBusinessOrderNos.add(templateOrderNo)) {
+ throw new ServiceException("业务单号已存在:" + templateOrderNo + "(与本文件其他页签的OrderNO重复),请修改模板中的OrderNO后重新导入");
+ }
reservationStockInOrderDO.setBusinessOrderNo(templateOrderNo);
}
reservationStockInOrderDO.setOrganizationId(loginUser.getUserPo().getOrganizationId());
@@ -740,8 +893,19 @@ public class ReservationStockInOrderImpl extends ServiceImpl result = new HashMap<>();
try {
- DeliveryDataDTO deliveryDataDTO = reservationStockInOrderService.parseExcelFile(file, "", warehouseId);
- result.put("result", deliveryDataDTO);
+ // 多页签导入:Excel中每个工作表独立生成一张出库单,任一页签校验失败整体不落库
+ List results = reservationStockInOrderService.parseExcelFile(file, "", warehouseId);
+ // result 保留第一个页签的解析数据(兼容老前端);results 为全部页签结果
+ result.put("result", results.isEmpty() ? null : results.get(0).getDeliveryData());
+ result.put("results", results);
result.put("code", 200);
- result.put("msg", "解析成功");
+ String orderNumbers = results.stream()
+ .map(SheetImportResultDTO::getOrderNumber)
+ .collect(java.util.stream.Collectors.joining("、"));
+ result.put("msg", "成功导入" + results.size() + "张出库单:" + orderNumbers);
return new ResponseEntity<>(result, HttpStatus.OK);
} catch (IllegalArgumentException e) {
result.put("code", 400);
@@ -237,18 +244,23 @@ public class ReservationStockInOrderApi extends BaseController {
}
/**
- * 接口1:仅解析Excel文件(返回解析结果,不保存)
- * 用途:预览Excel解析数据
+ * 接口1:解析并导入入库单Excel(多页签:不传sheetName时每个工作表独立生成一张入库单,任一页签校验失败整体不落库)
*/
@PostMapping("/parse-excel")
public ResponseEntity> parseStockInExcel(
@RequestParam("file") MultipartFile file,
@RequestParam(value = "sheetName", required = false) String sheetName) {
try {
- StockInDataDTO resultDTO = reservationStockInOrderService.parseStockInExcel(file, sheetName);
+ List results = reservationStockInOrderService.parseStockInExcel(file, sheetName);
Map result = new HashMap<>();
- result.put("result", resultDTO);
- result.put("code",200);
+ // result 保留第一个页签的解析数据(兼容老前端);results 为全部页签结果
+ result.put("result", results.isEmpty() ? null : results.get(0).getStockInData());
+ result.put("results", results);
+ result.put("code", 200);
+ String orderNumbers = results.stream()
+ .map(SheetImportResultDTO::getOrderNumber)
+ .collect(java.util.stream.Collectors.joining("、"));
+ result.put("msg", "成功导入" + results.size() + "张入库单:" + orderNumbers);
return new ResponseEntity<>(result, HttpStatus.OK);
} catch (IllegalArgumentException e) {
// 参数错误(如文件为空)
From 762c49cd0f3ef6459916e51ce3bd5ff35e70b0cd Mon Sep 17 00:00:00 2001
From: rcx <3084692334@qq.com>
Date: Fri, 4 Sep 2026 11:10:20 +0800
Subject: [PATCH 79/87] =?UTF-8?q?=E5=8F=91=20=E6=B5=8B=E8=AF=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
mhd_wms/src/main/resources/bootstrap.yml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/mhd_wms/src/main/resources/bootstrap.yml b/mhd_wms/src/main/resources/bootstrap.yml
index 52ade270d..39eb710cb 100644
--- a/mhd_wms/src/main/resources/bootstrap.yml
+++ b/mhd_wms/src/main/resources/bootstrap.yml
@@ -14,18 +14,18 @@ spring:
nacos:
discovery:
# server-addr: 127.0.0.1:8848
-# server-addr: 10.33.0.129:6010
+ server-addr: 10.33.0.129:6010
# 线上测试环境配置 容器名+端口号
- server-addr: 10.102.192.31:6848
+# server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
# server-addr: 10.102.192.105:6848
config:
# server-addr: 127.0.0.1:8848
-# server-addr: 10.33.0.129:
+ server-addr: 10.33.0.129:6010
# 线上测试环境配置 容器名+端口号
- server-addr: 10.102.192.31:6848
+# server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From edb7a5343d6eaa0277a036e1f3cf5d2d9cc50191 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=8E=8B=E5=A5=8E=E5=85=B4?= <2220574228@qq.com>
Date: Fri, 4 Sep 2026 11:37:06 +0800
Subject: [PATCH 80/87] =?UTF-8?q?=E9=80=BB=E8=BE=91=E5=88=A0=E9=99=A4?=
=?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6;?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../stockOutOrder/StockOutOrderApplicationService.java | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java
index 7dfe88da6..af7cae9d0 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/application/service/stockOutOrder/StockOutOrderApplicationService.java
@@ -1005,7 +1005,8 @@ public class StockOutOrderApplicationService {
}
BeanUtils.copyProperties(stockOutOrderDb, stockOutOrderD);
List outMaterialDetailList = outMaterialDetailService.list(new QueryWrapper().lambda()
- .eq(OutMaterialDetail::getOutOrderNumber, stockOutOrderDb.getOutOrderNumber()));
+ .eq(OutMaterialDetail::getOutOrderNumber, stockOutOrderDb.getOutOrderNumber())
+ .eq(OutMaterialDetail::getDelFlag,1));
List materialDetailList = cn.hutool.core.bean.BeanUtil.copyToList(outMaterialDetailList, OutMaterialDetailDO.class);
List materialDetailList2 = new ArrayList<>();
// 仅通宇账号启用与库存分配弹窗同口径的新匹配(物料+箱号/卡板+Sheet Ref 多值拆 token);
@@ -1103,7 +1104,8 @@ public class StockOutOrderApplicationService {
}
BeanUtils.copyProperties(stockOutOrderDb, stockOutOrderD);
List outMaterialDetailList = outMaterialDetailService.list(new QueryWrapper().lambda()
- .eq(OutMaterialDetail::getOutOrderNumber, stockOutOrderDb.getOutOrderNumber()));
+ .eq(OutMaterialDetail::getOutOrderNumber, stockOutOrderDb.getOutOrderNumber())
+ .eq(OutMaterialDetail::getDelFlag, 1));
List materialDetailList = cn.hutool.core.bean.BeanUtil.copyToList(outMaterialDetailList, OutMaterialDetailDO.class);
List materialDetailList2 = new ArrayList<>();
for (OutMaterialDetailDO detail : materialDetailList) {
@@ -1441,7 +1443,9 @@ public class StockOutOrderApplicationService {
List returnOutMaterialDetailDOList = new ArrayList<>();
for (OutMaterialDetailDO outMaterialDetailDO : stockOutOrderDO.getMaterialDetailList()){
Long uniqueId = outMaterialDetailDO.getUniqueId();
- OutMaterialDetail outMaterialDetail = outMaterialDetailService.getOne(new LambdaQueryWrapper().eq(OutMaterialDetail::getUniqueId, uniqueId));
+ OutMaterialDetail outMaterialDetail = outMaterialDetailService.getOne(new LambdaQueryWrapper()
+ .eq(OutMaterialDetail::getUniqueId, uniqueId)
+ .eq(OutMaterialDetail::getDelFlag,1));
if (outMaterialDetail == null){
throw new ServiceException("出库明细不存在");
}
From 9fd3d34610db1e73a6974548a4d06bbe8f25187e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=8E=8B=E5=A5=8E=E5=85=B4?= <2220574228@qq.com>
Date: Fri, 4 Sep 2026 11:51:10 +0800
Subject: [PATCH 81/87] =?UTF-8?q?=E9=80=BB=E8=BE=91=E5=88=A0=E9=99=A4?=
=?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6;?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../stockOutOrder/service/StockOutOrderDomainService.java | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/service/StockOutOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/service/StockOutOrderDomainService.java
index 18af0e37e..57a0b3801 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/service/StockOutOrderDomainService.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/service/StockOutOrderDomainService.java
@@ -1436,7 +1436,10 @@ public class StockOutOrderDomainService {
stockOutOrderService.update(stockOutOrder, new UpdateWrapper().lambda().in(StockOutOrder::getOutOrderId, stockOutOrderId));
List stockOutOrderNumber = stockOutOrderList.stream().map(StockOutOrder::getOutOrderNumber).collect(Collectors.toList());
- List list = outMaterialDetailService.list(new QueryWrapper().lambda().in(OutMaterialDetail::getOutOrderNumber, stockOutOrderNumber).eq(OutMaterialDetail::getGenPickingOrder, 2));
+ List list = outMaterialDetailService.list(new QueryWrapper().lambda()
+ .in(OutMaterialDetail::getOutOrderNumber, stockOutOrderNumber)
+ .eq(OutMaterialDetail::getGenPickingOrder, 2)
+ .eq(OutMaterialDetail::getDelFlag, 1));
if (CollectionUtils.isEmpty(list)){
throw new ServiceException("不存在已分配且未生成拣货单的物料明细,无法生成拣货单!");
}
From 94d05cca9cfb96e30eef0438823389d12c8946f2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=8E=8B=E5=A5=8E=E5=85=B4?= <2220574228@qq.com>
Date: Fri, 4 Sep 2026 11:52:53 +0800
Subject: [PATCH 82/87] =?UTF-8?q?=E5=8F=9131?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/com/mhd/system/api/BmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/OmsServiceFeign.java | 2 +-
.../main/java/com/mhd/system/api/WlhyServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/YmsServiceFeign.java | 2 +-
.../com/mhd/common/core/feign/ThirdPartyServiceFeign.java | 2 +-
.../oms/infrastructure/feign/ThirdPartyServiceFeign.java | 2 +-
mhd_wms/src/main/resources/bootstrap.yml | 8 ++++----
8 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
index 0d65c89a1..e37c5e3cf 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
@@ -18,7 +18,7 @@ import java.util.Set;
/**
* bms财务结算系统feign调用接口
*/
-@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.33.0.129:8012",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.32:8012",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface BmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
index 8a7006304..4ef3bed80 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.concurrent.CompletableFuture;
-@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.33.0.99:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.33:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface OmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
index ba9a45148..d976fcc98 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
@@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
-@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.33.0.129:8014",configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.102.192.31:8014",configuration = FeignAutoConfiguration.class)
public interface WlhyServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
index 7fbd7dd9b..1fe69a003 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
@@ -21,7 +21,7 @@ import java.util.Map;
* @description: TODO
* @date 2024/5/10 8:58
**/
-@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.33.0.109:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.32:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface WmsServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
index beba5b1af..750ed853e 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
@@ -9,7 +9,7 @@ import com.mhd.system.api.feign.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
-@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.33.0.99:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.33:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface YmsServiceFeign {
/**
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
index 9fd21ae67..2268b61c6 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
@@ -26,7 +26,7 @@ import java.io.InputStream;
import java.util.List;
import java.util.Map;
-@FeignClient(value = "mhd-third-party-service",url = "http://10.33.0.129:8012",configuration = FeignAutoConfiguration.class)
+@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.31:8012",configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
index 376500b1c..8c86ae1ad 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
@@ -22,7 +22,7 @@ import java.util.Map;
/**
* 三方服务 Feign
*/
-@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.33.0.129:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.31:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_wms/src/main/resources/bootstrap.yml b/mhd_wms/src/main/resources/bootstrap.yml
index 39eb710cb..e8f169bf2 100644
--- a/mhd_wms/src/main/resources/bootstrap.yml
+++ b/mhd_wms/src/main/resources/bootstrap.yml
@@ -14,18 +14,18 @@ spring:
nacos:
discovery:
# server-addr: 127.0.0.1:8848
- server-addr: 10.33.0.129:6010
+# server-addr: 10.33.0.129:6010
# 线上测试环境配置 容器名+端口号
-# server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
# server-addr: 10.102.192.105:6848
config:
# server-addr: 127.0.0.1:8848
- server-addr: 10.33.0.129:6010
+# server-addr: 10.33.0.129:6010
# 线上测试环境配置 容器名+端口号
-# server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From ee7dbfcfb97543551f29debb26eccc2fd04f0e8b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=8E=8B=E5=A5=8E=E5=85=B4?= <2220574228@qq.com>
Date: Fri, 4 Sep 2026 11:55:45 +0800
Subject: [PATCH 83/87] =?UTF-8?q?=E5=8F=9130?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/com/mhd/system/api/BmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/OmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WlhyServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/YmsServiceFeign.java | 2 +-
.../com/mhd/common/core/feign/ThirdPartyServiceFeign.java | 2 +-
.../mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java | 2 +-
mhd_wms/src/main/resources/bootstrap.yml | 4 ++--
8 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
index e37c5e3cf..ff342323e 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
@@ -18,7 +18,7 @@ import java.util.Set;
/**
* bms财务结算系统feign调用接口
*/
-@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.32:8012",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.3:8012",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface BmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
index 4ef3bed80..e9418197a 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.concurrent.CompletableFuture;
-@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.33:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.4:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface OmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
index d976fcc98..e4a817238 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
@@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
-@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.102.192.31:8014",configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.102.192.30:8014",configuration = FeignAutoConfiguration.class)
public interface WlhyServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
index 1fe69a003..26a92624c 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
@@ -21,7 +21,7 @@ import java.util.Map;
* @description: TODO
* @date 2024/5/10 8:58
**/
-@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.32:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.3:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface WmsServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
index 750ed853e..12571141a 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
@@ -9,7 +9,7 @@ import com.mhd.system.api.feign.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
-@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.33:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.4:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface YmsServiceFeign {
/**
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
index 2268b61c6..61f781399 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
@@ -26,7 +26,7 @@ import java.io.InputStream;
import java.util.List;
import java.util.Map;
-@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.31:8012",configuration = FeignAutoConfiguration.class)
+@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.30:8012",configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
index 8c86ae1ad..ca93d3312 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
@@ -22,7 +22,7 @@ import java.util.Map;
/**
* 三方服务 Feign
*/
-@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.31:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.30:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_wms/src/main/resources/bootstrap.yml b/mhd_wms/src/main/resources/bootstrap.yml
index e8f169bf2..fc7380c20 100644
--- a/mhd_wms/src/main/resources/bootstrap.yml
+++ b/mhd_wms/src/main/resources/bootstrap.yml
@@ -16,7 +16,7 @@ spring:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
# 线上测试环境配置 容器名+端口号
- server-addr: 10.102.192.31:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
@@ -25,7 +25,7 @@ spring:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
# 线上测试环境配置 容器名+端口号
- server-addr: 10.102.192.31:6848
+ server-addr: 10.102.192.30:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From 03978d23d78853f1fc7976dcfbb2633c7d2af7a9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=8E=8B=E5=A5=8E=E5=85=B4?= <2220574228@qq.com>
Date: Fri, 4 Sep 2026 12:17:28 +0800
Subject: [PATCH 84/87] =?UTF-8?q?=E5=8F=9130?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../repository/persistence/OutMaterialDetailImpl.java | 8 ++++++--
.../pickingOrder/service/PickingOrderDomainService.java | 4 +++-
.../pickingOrder/service/ReviewOrderDomainService.java | 3 ++-
.../repository/persistence/ShiftMaterialDetailImpl.java | 7 +++++--
4 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/repository/persistence/OutMaterialDetailImpl.java b/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/repository/persistence/OutMaterialDetailImpl.java
index ee2655055..1865c6e22 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/repository/persistence/OutMaterialDetailImpl.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/repository/persistence/OutMaterialDetailImpl.java
@@ -551,7 +551,9 @@ public class OutMaterialDetailImpl extends ServiceImpl outMaterialDetailList,String outOrderNumber,LoginUser loginUser) {
- StockOutOrder stockOutOrder = stockOutOrderMapper.selectOne(new QueryWrapper().lambda().eq(StockOutOrder::getOutOrderNumber, outOrderNumber));
+ StockOutOrder stockOutOrder = stockOutOrderMapper.selectOne(new QueryWrapper().lambda()
+ .eq(StockOutOrder::getOutOrderNumber, outOrderNumber)
+ .eq(StockOutOrder::getDelFlag, 1));
for (OutMaterialDetail outMaterialDetail : outMaterialDetailList) {
BigDecimal nowAllocationQuantity = outMaterialDetail.getNowAllocationQuantity();
if (nowAllocationQuantity == null || nowAllocationQuantity.compareTo(BigDecimal.ZERO) <= 0) {
@@ -700,7 +702,9 @@ public class OutMaterialDetailImpl extends ServiceImpl outMaterialDetailList,String outOrderNumber,LoginUser loginUser) {
- StockOutOrder stockOutOrder = stockOutOrderMapper.selectOne(new QueryWrapper().lambda().eq(StockOutOrder::getOutOrderNumber, outOrderNumber));
+ StockOutOrder stockOutOrder = stockOutOrderMapper.selectOne(new QueryWrapper().lambda()
+ .eq(StockOutOrder::getOutOrderNumber, outOrderNumber)
+ .eq(StockOutOrder::getDelFlag,1));
for (OutMaterialDetail outMaterialDetail : outMaterialDetailList) {
BigDecimal nowAllocationQuantity = outMaterialDetail.getNowAllocationQuantity();
if (nowAllocationQuantity == null || nowAllocationQuantity.compareTo(BigDecimal.ZERO) <= 0) {
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/service/PickingOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/service/PickingOrderDomainService.java
index d79187f09..078a926d6 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/service/PickingOrderDomainService.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/service/PickingOrderDomainService.java
@@ -522,7 +522,9 @@ public class PickingOrderDomainService {
List list = pickingMaterialDetailService.list(new QueryWrapper().lambda().eq(PickingMaterialDetail::getPickingOrderNumber, pickingOrder.getPickingOrderNumber()));
for (PickingMaterialDetail pickingMaterialDetail :list){
- OutMaterialDetail outMaterialDetail = outMaterialDetailMapper.selectOne(new QueryWrapper().lambda().eq(OutMaterialDetail::getUniqueId, pickingMaterialDetail.getOutUniqueId()));
+ OutMaterialDetail outMaterialDetail = outMaterialDetailMapper.selectOne(new QueryWrapper().lambda()
+ .eq(OutMaterialDetail::getUniqueId, pickingMaterialDetail.getOutUniqueId())
+ .eq(OutMaterialDetail::getDelFlag,1));
outMaterialDetail.setPickingQuantity(pickingMaterialDetail.getPickingQuantity());
outMaterialDetailMapper.updateById(outMaterialDetail);
}
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/service/ReviewOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/service/ReviewOrderDomainService.java
index 56ecf7782..054f14b46 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/service/ReviewOrderDomainService.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/service/ReviewOrderDomainService.java
@@ -260,7 +260,8 @@ public class ReviewOrderDomainService {
.eq(OutMaterialDetail::getDelFlag, 1));
if (outMd == null) {
outMd = outMaterialDetailMapper.selectOne(new LambdaQueryWrapper()
- .eq(OutMaterialDetail::getUniqueId, line.getOutUniqueId()));
+ .eq(OutMaterialDetail::getUniqueId, line.getOutUniqueId())
+ .eq(OutMaterialDetail::getDelFlag, 1));
}
if (outMd != null) {
d.setMaterialDetailId(outMd.getMaterialDetailId());
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/shiftMaterialDetail/repository/persistence/ShiftMaterialDetailImpl.java b/mhd_wms/src/main/java/com/mhd/wms/domain/shiftMaterialDetail/repository/persistence/ShiftMaterialDetailImpl.java
index 44f73bcaf..945430d61 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/domain/shiftMaterialDetail/repository/persistence/ShiftMaterialDetailImpl.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/shiftMaterialDetail/repository/persistence/ShiftMaterialDetailImpl.java
@@ -20,6 +20,7 @@ import com.mhd.wms.domain.materialInventory.repository.facade.IMaterialInventory
import com.mhd.wms.domain.materialInventory.repository.mapper.MaterialInventoryMapper;
import com.mhd.wms.domain.materialInventory.repository.po.MaterialInventoryPO;
import com.mhd.wms.domain.materialInventory.repository.todo.MaterialInventoryDO;
+import com.mhd.wms.domain.outMaterialDetail.entity.OutMaterialDetail;
import com.mhd.wms.domain.outMaterialDetailSerialNumber.entity.OutMaterialDetailSerialNumber;
import com.mhd.wms.domain.outMaterialDetailSerialNumber.repository.facade.IOutMaterialDetailSerialNumberService;
import com.mhd.wms.domain.outMaterialDetailSerialNumber.repository.todo.OutMaterialDetailSerialNumberDO;
@@ -153,7 +154,9 @@ public class ShiftMaterialDetailImpl extends ServiceImpl lqw = new LambdaQueryWrapper<>();
// 按照物料名称排序
- lqw.eq(ShiftMaterialDetail::getShiftIoDetailId, shiftIoDetailId).orderByAsc(ShiftMaterialDetail::getMaterialName);
+ lqw.eq(ShiftMaterialDetail::getShiftIoDetailId, shiftIoDetailId)
+ .eq(ShiftMaterialDetail::getDelFlag, 1)
+ .orderByAsc(ShiftMaterialDetail::getMaterialName);
ShiftMaterialDetail shiftMaterialDetail = shiftMaterialDetailMapper.selectOne(lqw);
ShiftMaterialDetailPO shiftMaterialDetailPO = new ShiftMaterialDetailPO();
BeanUtils.copyProperties(shiftMaterialDetail, shiftMaterialDetailPO);
@@ -888,4 +891,4 @@ public class ShiftMaterialDetailImpl extends ServiceImpl
Date: Fri, 4 Sep 2026 12:21:17 +0800
Subject: [PATCH 85/87] =?UTF-8?q?=E5=8F=9131?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/com/mhd/system/api/BmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/OmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WlhyServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/WmsServiceFeign.java | 2 +-
.../src/main/java/com/mhd/system/api/YmsServiceFeign.java | 2 +-
.../com/mhd/common/core/feign/ThirdPartyServiceFeign.java | 2 +-
.../mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java | 2 +-
mhd_wms/src/main/resources/bootstrap.yml | 4 ++--
8 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
index ff342323e..e37c5e3cf 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/BmsServiceFeign.java
@@ -18,7 +18,7 @@ import java.util.Set;
/**
* bms财务结算系统feign调用接口
*/
-@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.3:8012",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "BmsService", value = ServiceNameConstants.BMS_SERVICE, url = "http://10.102.192.32:8012",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface BmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
index e9418197a..4ef3bed80 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/OmsServiceFeign.java
@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.concurrent.CompletableFuture;
-@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.4:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "OmsService", value = ServiceNameConstants.OMS_SERVICE,url = "http://10.102.192.33:8017",fallbackFactory = RemoteOmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface OmsServiceFeign {
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
index e4a817238..d976fcc98 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WlhyServiceFeign.java
@@ -26,7 +26,7 @@ import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
-@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.102.192.30:8014",configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "commonWlhyServiceFeign",value = ServiceNameConstants.WLHY_SERVICE,url = "http://10.102.192.31:8014",configuration = FeignAutoConfiguration.class)
public interface WlhyServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
index 26a92624c..1fe69a003 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/WmsServiceFeign.java
@@ -21,7 +21,7 @@ import java.util.Map;
* @description: TODO
* @date 2024/5/10 8:58
**/
-@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.3:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "remoteWmsServiceFeign",value = ServiceNameConstants.WMS_SERVICE, url = "http://10.102.192.32:8016",fallbackFactory = RemoteWmsFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface WmsServiceFeign {
/**
diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
index 12571141a..750ed853e 100644
--- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
+++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/YmsServiceFeign.java
@@ -9,7 +9,7 @@ import com.mhd.system.api.feign.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
-@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.4:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "YmsService", value = ServiceNameConstants.YMS_SERVICE,url = "http://10.102.192.33:8018",fallbackFactory = RemoteBmsFeignFallbackFactory.class, configuration = FeignAutoConfiguration.class)
public interface YmsServiceFeign {
/**
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
index 61f781399..2268b61c6 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/feign/ThirdPartyServiceFeign.java
@@ -26,7 +26,7 @@ import java.io.InputStream;
import java.util.List;
import java.util.Map;
-@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.30:8012",configuration = FeignAutoConfiguration.class)
+@FeignClient(value = "mhd-third-party-service",url = "http://10.102.192.31:8012",configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
index ca93d3312..8c86ae1ad 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/infrastructure/feign/ThirdPartyServiceFeign.java
@@ -22,7 +22,7 @@ import java.util.Map;
/**
* 三方服务 Feign
*/
-@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.30:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
+@FeignClient(contextId = "thirdPartyServiceFeign",url = "http://10.102.192.31:8012", value = ServiceNameConstants.THIRDPARTY_CENTER, configuration = FeignAutoConfiguration.class)
public interface ThirdPartyServiceFeign {
//查询当前组织所有三方接口信息
diff --git a/mhd_wms/src/main/resources/bootstrap.yml b/mhd_wms/src/main/resources/bootstrap.yml
index fc7380c20..e8f169bf2 100644
--- a/mhd_wms/src/main/resources/bootstrap.yml
+++ b/mhd_wms/src/main/resources/bootstrap.yml
@@ -16,7 +16,7 @@ spring:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
# 线上测试环境配置 容器名+端口号
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
@@ -25,7 +25,7 @@ spring:
# server-addr: 127.0.0.1:8848
# server-addr: 10.33.0.129:6010
# 线上测试环境配置 容器名+端口号
- server-addr: 10.102.192.30:6848
+ server-addr: 10.102.192.31:6848
username: nacos
password: manhuoda@2023
#线上正式环境
From 12e43080b8af43e019e1446aa4d03b3a76851b09 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=8E=8B=E5=A5=8E=E5=85=B4?= <2220574228@qq.com>
Date: Fri, 4 Sep 2026 13:55:07 +0800
Subject: [PATCH 86/87] =?UTF-8?q?=E5=8F=9131?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ExecutionStockOutOrderDomainService.java | 4 +++-
.../ReservationStockOutOrderDomainService.java | 4 +++-
.../ReservationStockOutOrderApi.java | 6 ++++--
.../ReserveStockOutOrderApi.java | 7 +++++--
.../ExecutionStockOutOrderApi.java | 7 +++++--
.../repository/persistence/DeliveTaskImpl.java | 5 +++--
.../service/HandoverTaskOrderDomainService.java | 1 +
.../persistence/OutMaterialDetailImpl.java | 10 ++++++++--
.../service/PickingOrderDomainService.java | 8 +++++---
.../pushSyncBms/PushSyncBmsDomainService.java | 6 +++---
.../SowingDistributionDetailsImpl.java | 15 ++++++++++-----
.../service/StockOutTaskOrderDomainService.java | 7 +++++--
.../facadeApi/stockOutOrder/StockOutOrderApi.java | 2 ++
13 files changed, 57 insertions(+), 25 deletions(-)
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/service/ExecutionStockOutOrderDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/service/ExecutionStockOutOrderDomainService.java
index 311b600ae..faa399de7 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/service/ExecutionStockOutOrderDomainService.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/executionStockOutOrder/service/ExecutionStockOutOrderDomainService.java
@@ -1028,7 +1028,9 @@ public class ExecutionStockOutOrderDomainService {
ReservationDeliveryDetailsLink reservationDeliveryDetailsLink = list.get(0);
String orderNumber = reservationDeliveryDetailsLink.getOrderNumber();
Integer bag = reservationDeliveryDetailsLink.getBag();
- ExecutionStockOutOrder stockOutOrder = stockOutOrderService.getOne(new QueryWrapper().lambda().eq(ExecutionStockOutOrder::getOutOrderNumber, orderNumber), false);
+ ExecutionStockOutOrder stockOutOrder = stockOutOrderService.getOne(new QueryWrapper().lambda()
+ .eq(ExecutionStockOutOrder::getOutOrderNumber, orderNumber)
+ .eq(ExecutionStockOutOrder::getDelFlag,1), false);
if (stockOutOrder != null) {
ExecutionStockInOrder reservationStockInOrder = new ExecutionStockInOrder();
reservationStockInOrder.setPictureUrl(pictureUrl);
diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java
index a90e17cdb..84c3abc6b 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/domain/reservationStockOutOrder/service/ReservationStockOutOrderDomainService.java
@@ -1220,7 +1220,9 @@ public class ReservationStockOutOrderDomainService {
ReservationDeliveryDetailsLink reservationDeliveryDetailsLink = list.get(0);
String orderNumber = reservationDeliveryDetailsLink.getOrderNumber();
Integer bag = reservationDeliveryDetailsLink.getBag();
- ReservationStockOutOrder stockOutOrder = stockOutOrderService.getOne(new QueryWrapper().lambda().eq(ReservationStockOutOrder::getOutOrderNumber, orderNumber), false);
+ ReservationStockOutOrder stockOutOrder = stockOutOrderService.getOne(new QueryWrapper().lambda()
+ .eq(ReservationStockOutOrder::getOutOrderNumber, orderNumber)
+ .eq(ReservationStockOutOrder::getDelFlag,1), false);
if (stockOutOrder != null) {
ReservationStockInOrder reservationStockInOrder = new ReservationStockInOrder();
reservationStockInOrder.setPictureUrl(pictureUrl);
diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/ReservationStockOutOrder/ReservationStockOutOrderApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/ReservationStockOutOrder/ReservationStockOutOrderApi.java
index 77dd5ebf6..28114c62b 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/ReservationStockOutOrder/ReservationStockOutOrderApi.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/ReservationStockOutOrder/ReservationStockOutOrderApi.java
@@ -104,7 +104,8 @@ public class ReservationStockOutOrderApi extends BaseController {
{
// 根据出库单号查询出库单,再按出库单ID查询详情,保证与出库管理页面一致
ReservationStockOutOrder stockOutOrder = stockOutOrderService.getOne(new LambdaQueryWrapper()
- .eq(ReservationStockOutOrder::getOutOrderNumber, outOrderNumber));
+ .eq(ReservationStockOutOrder::getOutOrderNumber, outOrderNumber)
+ .eq(ReservationStockOutOrder::getDelFlag,1));
if (stockOutOrder == null) {
return AjaxResult.error("出库单不存在");
}
@@ -122,7 +123,8 @@ public class ReservationStockOutOrderApi extends BaseController {
return AjaxResult.error("orderNumber不能为空");
}
ReservationStockOutOrder stockOutOrder = stockOutOrderService.getOne(new LambdaQueryWrapper()
- .eq(ReservationStockOutOrder::getOutOrderNumber, orderNumber));
+ .eq(ReservationStockOutOrder::getOutOrderNumber, orderNumber)
+ .eq(ReservationStockOutOrder::getDelFlag,1));
if (stockOutOrder == null) {
return AjaxResult.error("出库单不存在");
}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/ReserveStockOutOrder/ReserveStockOutOrderApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/ReserveStockOutOrder/ReserveStockOutOrderApi.java
index 5be6eb209..0b3d587e7 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/ReserveStockOutOrder/ReserveStockOutOrderApi.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/ReserveStockOutOrder/ReserveStockOutOrderApi.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.mhd.common.core.web.controller.BaseController;
import com.mhd.common.core.web.domain.AjaxResult;
import com.mhd.common.core.web.page.TableDataInfo;
+import com.mhd.oms.domain.reservationStockOutOrder.entity.ReservationStockOutOrder;
import com.mhd.oms.domain.reserveOutMaterialDetail.repository.po.ReserveOutMaterialDetailPO;
import com.mhd.oms.domain.reserveStockInOrder.repository.listener.ValidationException;
import com.mhd.oms.domain.reserveStockInOrder.repository.todo.ReserveStockInOrderDO;
@@ -149,7 +150,8 @@ public class ReserveStockOutOrderApi extends BaseController {
{
// 根据出库单号查询出库单,再按出库单ID查询详情,保证与出库管理页面一致
ReserveStockOutOrder stockOutOrder = stockOutOrderService.getOne(new LambdaQueryWrapper()
- .eq(ReserveStockOutOrder::getOutOrderNumber, outOrderNumber));
+ .eq(ReserveStockOutOrder::getOutOrderNumber, outOrderNumber)
+ .eq(ReserveStockOutOrder::getDelFlag,1));
if (stockOutOrder == null) {
return AjaxResult.error("出库单不存在");
}
@@ -167,7 +169,8 @@ public class ReserveStockOutOrderApi extends BaseController {
return AjaxResult.error("orderNumber不能为空");
}
ReserveStockOutOrder stockOutOrder = stockOutOrderService.getOne(new LambdaQueryWrapper()
- .eq(ReserveStockOutOrder::getOutOrderNumber, orderNumber));
+ .eq(ReserveStockOutOrder::getOutOrderNumber, orderNumber)
+ .eq(ReserveStockOutOrder::getDelFlag,1));
if (stockOutOrder == null) {
return AjaxResult.error("出库单不存在");
}
diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/executionStockOutOrder/ExecutionStockOutOrderApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/executionStockOutOrder/ExecutionStockOutOrderApi.java
index 271db670f..d0c679bc3 100644
--- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/executionStockOutOrder/ExecutionStockOutOrderApi.java
+++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/executionStockOutOrder/ExecutionStockOutOrderApi.java
@@ -12,6 +12,7 @@ import com.mhd.oms.domain.executionStockOutOrder.repository.todo.ExecutionStockO
import com.mhd.oms.domain.executionStockOutOrder.repository.todo.ExecutionStockOutOrderDTO;
import com.mhd.oms.domain.executionStockOutOrder.service.ExecutionStockOutOrderApplicationService;
import com.mhd.oms.domain.executionStockOutOrder.service.ExecutionStockOutOrderAssembler;
+import com.mhd.oms.domain.reservationStockOutOrder.entity.ReservationStockOutOrder;
import com.mhd.system.api.domain.OutMaterialDetailTZPD;
import com.mhd.system.api.domain.StockOutOrderTZPD;
import io.swagger.annotations.ApiOperation;
@@ -102,7 +103,8 @@ public class ExecutionStockOutOrderApi extends BaseController {
{
// 根据出库单号查询出库单,再按出库单ID查询详情,保证与出库管理页面一致
ExecutionStockOutOrder stockOutOrder = stockOutOrderService.getOne(new LambdaQueryWrapper()
- .eq(ExecutionStockOutOrder::getOutOrderNumber, outOrderNumber));
+ .eq(ExecutionStockOutOrder::getOutOrderNumber, outOrderNumber)
+ .eq(ExecutionStockOutOrder::getDelFlag,1));
if (stockOutOrder == null) {
return AjaxResult.error("出库单不存在");
}
@@ -120,7 +122,8 @@ public class ExecutionStockOutOrderApi extends BaseController {
return AjaxResult.error("orderNumber不能为空");
}
ExecutionStockOutOrder stockOutOrder = stockOutOrderService.getOne(new LambdaQueryWrapper()
- .eq(ExecutionStockOutOrder::getOutOrderNumber, orderNumber));
+ .eq(ExecutionStockOutOrder::getOutOrderNumber, orderNumber)
+ .eq(ExecutionStockOutOrder::getDelFlag,1));
if (stockOutOrder == null) {
return AjaxResult.error("出库单不存在");
}
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/deliveTask/repository/persistence/DeliveTaskImpl.java b/mhd_wms/src/main/java/com/mhd/wms/domain/deliveTask/repository/persistence/DeliveTaskImpl.java
index 5d9fbaa99..df5867e8d 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/domain/deliveTask/repository/persistence/DeliveTaskImpl.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/deliveTask/repository/persistence/DeliveTaskImpl.java
@@ -120,7 +120,8 @@ public class DeliveTaskImpl extends ServiceImpl im
String orderNumber = handoverTaskOrder.getOrderNumber();//出库单号
// 已复核数量、出库单信息:直接从出库单获取(需在物料统计前获取,用于判断是否需要复核)
StockOutOrder stockOutOrder = stockOutOrderService.getOne(new LambdaQueryWrapper()
- .eq(StockOutOrder::getOutOrderNumber, orderNumber));
+ .eq(StockOutOrder::getOutOrderNumber, orderNumber)
+ .eq(StockOutOrder::getDelFlag,1));
if (stockOutOrder != null) {
deliveTaskPO.setOutOrderNumber(stockOutOrder.getOutOrderNumber());
deliveTaskPO.setOutOrderStatus(stockOutOrder.getStatus());
@@ -297,4 +298,4 @@ public class DeliveTaskImpl extends ServiceImpl im
public DeliveTaskPO querySum(DeliveTaskDO deliveTaskDO) {
return deliveTaskMapper.querySum(deliveTaskDO);
}
-}
+}
\ No newline at end of file
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/handoverTaskOrder/service/HandoverTaskOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/handoverTaskOrder/service/HandoverTaskOrderDomainService.java
index e9ecea6d7..e7e0d0941 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/domain/handoverTaskOrder/service/HandoverTaskOrderDomainService.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/handoverTaskOrder/service/HandoverTaskOrderDomainService.java
@@ -407,6 +407,7 @@ public class HandoverTaskOrderDomainService {
//交接完成节点修改库存
String orderNumber = handoverTaskOrder.getOrderNumber();
StockOutOrder stockOutOrder = stockOutOrderMapper.selectOne(new QueryWrapper().lambda()
+ .eq(StockOutOrder::getDelFlag,1)
.eq(StockOutOrder::getOutOrderNumber, orderNumber));
if (stockOutOrder == null) {
continue;
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/repository/persistence/OutMaterialDetailImpl.java b/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/repository/persistence/OutMaterialDetailImpl.java
index 1865c6e22..a473fa5ed 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/repository/persistence/OutMaterialDetailImpl.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/outMaterialDetail/repository/persistence/OutMaterialDetailImpl.java
@@ -999,7 +999,9 @@ public class OutMaterialDetailImpl extends ServiceImpl outMaterialDetailList,String outOrderNumber,LoginUser loginUser) {
- StockOutOrder stockOutOrder = stockOutOrderMapper.selectOne(new QueryWrapper().lambda().eq(StockOutOrder::getOutOrderNumber, outOrderNumber));
+ StockOutOrder stockOutOrder = stockOutOrderMapper.selectOne(new QueryWrapper().lambda()
+ .eq(StockOutOrder::getDelFlag,1)
+ .eq(StockOutOrder::getOutOrderNumber, outOrderNumber));
for (OutMaterialDetailDO outMaterialDetail : outMaterialDetailList) {
Long materialInventoryId = outMaterialDetail.getMaterialInventoryId();
BigDecimal allocationQuantity = outMaterialDetail.getActualQuantity();
@@ -1109,7 +1111,9 @@ public class OutMaterialDetailImpl extends ServiceImpl outMaterialDetailList,String outOrderNumber,LoginUser loginUser) {
- StockOutOrder stockOutOrder = stockOutOrderMapper.selectOne(new QueryWrapper().lambda().eq(StockOutOrder::getOutOrderNumber, outOrderNumber));
+ StockOutOrder stockOutOrder = stockOutOrderMapper.selectOne(new QueryWrapper().lambda()
+ .eq(StockOutOrder::getDelFlag,1)
+ .eq(StockOutOrder::getOutOrderNumber, outOrderNumber));
for (OutMaterialDetailDO outMaterialDetail : outMaterialDetailList) {
Long materialInventoryId = outMaterialDetail.getMaterialInventoryId();
BigDecimal allocationQuantity = outMaterialDetail.getActualQuantity();
@@ -1245,11 +1249,13 @@ public class OutMaterialDetailImpl extends ServiceImpl().lambda()
.eq(OutMaterialDetail::getOutOrderNumber, stockOutOrderDO.getOutOrderNumber())
+ .eq(OutMaterialDetail::getDelFlag,1)
.eq(OutMaterialDetail::getBarCode, stockOutOrderDO.getBarCode()));
}else {
OutMaterialDetailSerialNumber outMaterialDetailSerialNumber = outMaterialDetailSerialNumberService.getOne(new QueryWrapper().lambda()
.eq(OutMaterialDetailSerialNumber::getSerialNumber, stockOutOrderDO.getSerialNumber()));
outMaterialDetailDb = outMaterialDetailMapper.selectOne(new QueryWrapper().lambda()
+ .eq(OutMaterialDetail::getDelFlag,1)
.eq(OutMaterialDetail::getUniqueId, outMaterialDetailSerialNumber.getMaterialDetailUniqueId()));
}
if(outMaterialDetailDb == null){
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/service/PickingOrderDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/service/PickingOrderDomainService.java
index 078a926d6..d255f2cea 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/service/PickingOrderDomainService.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/pickingOrder/service/PickingOrderDomainService.java
@@ -401,7 +401,8 @@ public class PickingOrderDomainService {
// 拣货提交(/pickingOrderApi/picking)一次拣满也会完成拣货,此前仅 completePicking 会生成复核单,此处对齐
if (Boolean.TRUE.equals(updated) && Integer.valueOf(1).equals(pickingOrderPODb.getType())) {
StockOutOrder stockOutOrder = stockOutOrderService.getOne(new LambdaQueryWrapper()
- .eq(StockOutOrder::getOutOrderNumber, pickingOrderPODb.getOrderNumber()));
+ .eq(StockOutOrder::getOutOrderNumber, pickingOrderPODb.getOrderNumber())
+ .eq(StockOutOrder::getDelFlag,1));
if (stockOutOrder != null) {
Long newReviewId = reviewOrderDomainService.tryGenerateReviewOrderAfterPickingComplete(pickingOrderPODb, stockOutOrder);
if (newReviewId != null) {
@@ -493,7 +494,8 @@ public class PickingOrderDomainService {
int status = 6;
//不需要复核的单子 标记出库单完成
StockOutOrder stockOutOrderDb = stockOutOrderService.getOne(new QueryWrapper().lambda()
- .eq(StockOutOrder::getOutOrderNumber, pickingOrderPODb.getOrderNumber()));
+ .eq(StockOutOrder::getOutOrderNumber, pickingOrderPODb.getOrderNumber())
+ .eq(StockOutOrder::getDelFlag,1));
// 与下发拣货数量比较:只下发部分时用拣货计划数量,否则用出库单总数量
List allPickingOrders = pickingOrderService.list(new QueryWrapper().lambda()
.eq(PickingOrder::getDelFlag, 1)
@@ -736,7 +738,7 @@ public class PickingOrderDomainService {
throw new ServiceException("拣货单不存在");
}
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.eq(StockOutOrder::getOutOrderNumber, pickingOrderPO.getOrderNumber());
+ queryWrapper.eq(StockOutOrder::getDelFlag,1).eq(StockOutOrder::getOutOrderNumber, pickingOrderPO.getOrderNumber());
StockOutOrder stockOutOrder = stockOutOrderService.getOne(queryWrapper);
if(null == stockOutOrder){
throw new ServiceException("出库单不存在");
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/pushSyncBms/PushSyncBmsDomainService.java b/mhd_wms/src/main/java/com/mhd/wms/domain/pushSyncBms/PushSyncBmsDomainService.java
index 14861f700..85876594f 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/domain/pushSyncBms/PushSyncBmsDomainService.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/pushSyncBms/PushSyncBmsDomainService.java
@@ -48,7 +48,7 @@ public class PushSyncBmsDomainService {
public void pushInShelfOrder(String inOrderNumber) {
// 根据入库单号,查询入库单信息,并拼接推送所需参数
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.eq(StockInOrder::getInOrderNumber, inOrderNumber);
+ queryWrapper.eq(StockInOrder::getInOrderNumber, inOrderNumber).eq(StockInOrder::getDelFlag,1);
StockInOrder stockInOrder = iStockInOrderService.getOne(queryWrapper);
if(null == stockInOrder){
throw new ServiceException("入库单信息未找到");
@@ -96,7 +96,7 @@ public class PushSyncBmsDomainService {
*/
public void pushOutOrder(String outOrderNumber) {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.eq(StockOutOrder::getOutOrderNumber, outOrderNumber);
+ queryWrapper.eq(StockOutOrder::getOutOrderNumber, outOrderNumber).eq(StockOutOrder::getDelFlag,1);
StockOutOrder stockOutOrder = iStockOutOrderService.getOne(queryWrapper);
if(null == stockOutOrder){
throw new ServiceException("出库单信息未找到");
@@ -153,4 +153,4 @@ public class PushSyncBmsDomainService {
}
-}
+}
\ No newline at end of file
diff --git a/mhd_wms/src/main/java/com/mhd/wms/domain/sowingDistributionDetails/repository/persistence/SowingDistributionDetailsImpl.java b/mhd_wms/src/main/java/com/mhd/wms/domain/sowingDistributionDetails/repository/persistence/SowingDistributionDetailsImpl.java
index 6cbb43dbd..4be0031fa 100644
--- a/mhd_wms/src/main/java/com/mhd/wms/domain/sowingDistributionDetails/repository/persistence/SowingDistributionDetailsImpl.java
+++ b/mhd_wms/src/main/java/com/mhd/wms/domain/sowingDistributionDetails/repository/persistence/SowingDistributionDetailsImpl.java
@@ -233,8 +233,9 @@ public class SowingDistributionDetailsImpl extends ServiceImpl().lambda().
- eq(OutMaterialDetail::getUniqueId, outMaterialDetailSerialNumber.getMaterialDetailUniqueId()));
+ OutMaterialDetail outMaterialDetail = outMaterialDetailMapper.selectOne(new QueryWrapper().lambda()
+ .eq(OutMaterialDetail::getDelFlag,1)
+ .eq(OutMaterialDetail::getUniqueId, outMaterialDetailSerialNumber.getMaterialDetailUniqueId()));
if (outMaterialDetail == null){
throw new ServiceException("物料不存在");
}
@@ -273,7 +274,9 @@ public class SowingDistributionDetailsImpl extends ServiceImpl allocationByOrder(AllocationByOrderDO allocationByOrderDO) {
- StockOutOrder stockOutOrder = stockOutOrderMapper.selectOne(new QueryWrapper().lambda().eq(StockOutOrder::getOutOrderNumber, allocationByOrderDO.getOutOrderNumber()));
+ StockOutOrder stockOutOrder = stockOutOrderMapper.selectOne(new QueryWrapper