From 8bc07e8090b0a4fd2b4774996381bdbfb987b75b Mon Sep 17 00:00:00 2001
From: hjx <577364224@qq.com>
Date: Wed, 17 Dec 2025 10:09:44 +0800
Subject: [PATCH 01/13] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E4=BA=A7=E5=93=81?=
=?UTF-8?q?=E5=90=AF=E5=8A=A8=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/minio/MinIoUploadService.java | 7 ++++---
mhd_product/pom.xml | 6 ++++++
.../application/service/menu/MenuApplicationService.java | 2 +-
3 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/mhd-common/mhd-common-core/src/main/java/minio/MinIoUploadService.java b/mhd-common/mhd-common-core/src/main/java/minio/MinIoUploadService.java
index 9517886e2..9b70c9463 100644
--- a/mhd-common/mhd-common-core/src/main/java/minio/MinIoUploadService.java
+++ b/mhd-common/mhd-common-core/src/main/java/minio/MinIoUploadService.java
@@ -4,6 +4,7 @@ import com.aliyun.oss.ServiceException;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.util.UriUtils;
@@ -14,9 +15,9 @@ import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.UUID;
-
+@Service
public class MinIoUploadService {
- @Autowired
+ @Autowired(required=false)
private MinioClient minioClient;
private static String bucket="ngwl";
private static String host="http://10.102.192.5:6000";
@@ -31,7 +32,7 @@ public class MinIoUploadService {
/**
* 上传到minio
- * @param fileName
+ * @param
* @throws Exception
*/
diff --git a/mhd_product/pom.xml b/mhd_product/pom.xml
index e665e0a44..6d035cb51 100644
--- a/mhd_product/pom.xml
+++ b/mhd_product/pom.xml
@@ -129,6 +129,12 @@
com.mhd
mhd-common-log
+
+ io.minio
+ minio
+ 8.5.2
+ compile
+
diff --git a/mhd_product/src/main/java/com/linke/product/application/service/menu/MenuApplicationService.java b/mhd_product/src/main/java/com/linke/product/application/service/menu/MenuApplicationService.java
index 4ccea8aeb..da14c46f2 100644
--- a/mhd_product/src/main/java/com/linke/product/application/service/menu/MenuApplicationService.java
+++ b/mhd_product/src/main/java/com/linke/product/application/service/menu/MenuApplicationService.java
@@ -97,7 +97,7 @@ public class MenuApplicationService {
private SpecialServiceFeign logisticsServiceFeign;
@Resource
private MenuUtils menuUtils;
- @Autowired
+ @Autowired(required = false)
private MinIoUploadService minIoUploadService;
/**
From b8799a1ec733f6aac6158e594d05e822113b3c12 Mon Sep 17 00:00:00 2001
From: hjx <577364224@qq.com>
Date: Thu, 18 Dec 2025 00:29:03 +0800
Subject: [PATCH 02/13] =?UTF-8?q?nc=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../persistence/ReconciliationImpl.java | 30 ++++++-------------
1 file changed, 9 insertions(+), 21 deletions(-)
diff --git a/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java
index 6221b2652..276894b32 100644
--- a/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java
+++ b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java
@@ -389,21 +389,6 @@ public class ReconciliationImpl extends ServiceImpl ysitemList=new ArrayList();
ReconciliationDTO reconciliationDTO=new ReconciliationDTO();
reconciliationDTO.setInnerNumber(reconciliation.getInnerNumber());
- if(null==reconciliation.getSettlementPartyId()){
+ /* if(null==reconciliation.getSettlementPartyId()){
throw new ServiceException("没有结算方,请核对");
- }
+ }*/
String makerCodeNc="";
R> result=wlhyServiceFeign.getOrderListByReconciliation(reconciliationDTO);
if(result.getCode()==200){
From 3ee81a06eb765147ccbec5c5bba185ab65f6841e Mon Sep 17 00:00:00 2001
From: hjx <577364224@qq.com>
Date: Thu, 18 Dec 2025 01:29:02 +0800
Subject: [PATCH 03/13] =?UTF-8?q?nc=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/java/com/mhd/common/core/domain/entity/TmsOrder.java | 2 +-
.../repository/persistence/ReconciliationImpl.java | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/entity/TmsOrder.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/entity/TmsOrder.java
index a9f7009b7..e959dc7e1 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/entity/TmsOrder.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/entity/TmsOrder.java
@@ -524,7 +524,7 @@ public class TmsOrder implements Serializable {
private String payer;
@ApiModelProperty("客户编码nc")
- private String customsCodeNc;
+ private String customerCodeNc;
@ApiModelProperty("制单人编码nc")
private String makerCodeNc;
diff --git a/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java
index 276894b32..3f7afee5b 100644
--- a/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java
+++ b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java
@@ -445,7 +445,7 @@ public class ReconciliationImpl extends ServiceImpl
Date: Thu, 18 Dec 2025 01:30:31 +0800
Subject: [PATCH 04/13] =?UTF-8?q?nc=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../repository/persistence/ReconciliationImpl.java | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java
index 3f7afee5b..6ffdcfe12 100644
--- a/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java
+++ b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java
@@ -618,15 +618,15 @@ public class ReconciliationImpl extends ServiceImpl list=result.getData();
if(ObjectUtil.isNotNull(list)){
for(TmsOrder tmsOrder:list){
- if (org.apache.commons.lang.StringUtils.isBlank(tmsOrder.getSalesmanCodeNc())) {
+ /* if (org.apache.commons.lang.StringUtils.isBlank(tmsOrder.getSalesmanCodeNc())) {
throw new ServiceException("请先维护业务员编码");
}
if (org.apache.commons.lang.StringUtils.isBlank(tmsOrder.getMakerCodeNc())) {
throw new ServiceException("请先维护制单员编码");
}
- if (org.apache.commons.lang.StringUtils.isBlank(tmsOrder.getCustomsCodeNc())) {
+ if (org.apache.commons.lang.StringUtils.isBlank(tmsOrder.getCustomerCodeNc())) {
throw new ServiceException("请先维护制单员编码");
- }
+ }*/
SKitem item=new SKitem();
@@ -634,7 +634,7 @@ public class ReconciliationImpl extends ServiceImpl
Date: Thu, 18 Dec 2025 01:35:35 +0800
Subject: [PATCH 05/13] =?UTF-8?q?nc=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../repository/persistence/ReconciliationImpl.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java
index 6ffdcfe12..ceb94618f 100644
--- a/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java
+++ b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java
@@ -456,7 +456,7 @@ public class ReconciliationImpl extends ServiceImpl
Date: Thu, 18 Dec 2025 03:08:18 +0800
Subject: [PATCH 06/13] =?UTF-8?q?nc=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../persistence/ReconciliationImpl.java | 22 -------------------
1 file changed, 22 deletions(-)
diff --git a/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java
index ceb94618f..6165b8f70 100644
--- a/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java
+++ b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java
@@ -566,28 +566,6 @@ public class ReconciliationImpl extends ServiceImpl
Date: Thu, 18 Dec 2025 03:34:06 +0800
Subject: [PATCH 07/13] =?UTF-8?q?nc=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../repository/persistence/ReconciliationImpl.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java
index 6165b8f70..c175fdf6f 100644
--- a/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java
+++ b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java
@@ -606,7 +606,7 @@ public class ReconciliationImpl extends ServiceImpl
Date: Thu, 18 Dec 2025 03:35:08 +0800
Subject: [PATCH 08/13] =?UTF-8?q?nc=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../repository/persistence/ReconciliationImpl.java | 1 +
1 file changed, 1 insertion(+)
diff --git a/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java
index c175fdf6f..b337c4e4c 100644
--- a/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java
+++ b/mhd_finance/src/main/java/com/linke/finance/domain/reconciliation/repository/persistence/ReconciliationImpl.java
@@ -607,6 +607,7 @@ public class ReconciliationImpl extends ServiceImpl
Date: Thu, 25 Dec 2025 16:03:30 +0800
Subject: [PATCH 09/13] =?UTF-8?q?=E6=AD=A3=E5=BC=8F=E7=8E=AF=E5=A2=83?=
=?UTF-8?q?=E9=85=8D=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
mhd-auth/src/main/resources/bootstrap.yml | 12 ++++++++----
mhd-gateway/src/main/resources/bootstrap.yml | 12 ++++++++----
.../mhd-system/src/main/resources/bootstrap.yml | 14 ++++++++------
mhd-user-center/src/main/resources/bootstrap.yml | 12 ++++++++----
4 files changed, 32 insertions(+), 18 deletions(-)
diff --git a/mhd-auth/src/main/resources/bootstrap.yml b/mhd-auth/src/main/resources/bootstrap.yml
index 0e2deba8b..eede5c5a3 100644
--- a/mhd-auth/src/main/resources/bootstrap.yml
+++ b/mhd-auth/src/main/resources/bootstrap.yml
@@ -14,15 +14,19 @@ spring:
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.105:6848
+ server-addr: 10.102.192.5:6848
+ username: nacos
+ password: manhuoda@2023
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.105:6848
+ server-addr: 10.102.192.5:6848
+ username: nacos
+ password: manhuoda@2023
group: DEFAULT_GROUP # 默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置
file-extension: yml #默认properties
# 共享配置
diff --git a/mhd-gateway/src/main/resources/bootstrap.yml b/mhd-gateway/src/main/resources/bootstrap.yml
index 6fbcae731..01a76c684 100644
--- a/mhd-gateway/src/main/resources/bootstrap.yml
+++ b/mhd-gateway/src/main/resources/bootstrap.yml
@@ -16,16 +16,20 @@ spring:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.102.192.5:6848
- server-addr: 10.33.0.129:6010
+# server-addr: 10.33.0.129:6010
#线上正式环境
-# server-addr: 10.102.192.105:6848
+ server-addr: 10.102.192.5:6848
+ username: nacos
+ password: manhuoda@2023
config:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
# server-addr: 10.102.192.5:6848
- server-addr: 10.33.0.129:6010
+# server-addr: 10.33.0.129:6010
#线上正式环境
-# server-addr: 10.102.192.105:6848
+ server-addr: 10.102.192.5:6848
+ username: nacos
+ password: manhuoda@2023
group: DEFAULT_GROUP # 默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置
file-extension: yml #默认properties
# 共享配置
diff --git a/mhd-modules/mhd-system/src/main/resources/bootstrap.yml b/mhd-modules/mhd-system/src/main/resources/bootstrap.yml
index b01b7d280..dc7b508d7 100644
--- a/mhd-modules/mhd-system/src/main/resources/bootstrap.yml
+++ b/mhd-modules/mhd-system/src/main/resources/bootstrap.yml
@@ -15,17 +15,19 @@ spring:
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.105:6848
+ server-addr: 10.102.192.5:6848
+ username: nacos
+ password: manhuoda@2023
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.105:6848
+ server-addr: 10.102.192.5:6848
+ username: nacos
+ password: manhuoda@2023
group: DEFAULT_GROUP # 默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置
file-extension: yml #默认properties
# 共享配置
diff --git a/mhd-user-center/src/main/resources/bootstrap.yml b/mhd-user-center/src/main/resources/bootstrap.yml
index fbb15bbd9..73d8acd49 100644
--- a/mhd-user-center/src/main/resources/bootstrap.yml
+++ b/mhd-user-center/src/main/resources/bootstrap.yml
@@ -20,15 +20,19 @@ spring:
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.105:6848
+ server-addr: 10.102.192.5:6848
+ username: nacos
+ password: manhuoda@2023
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.105:6848
+ server-addr: 10.102.192.5:6848
+ username: nacos
+ password: manhuoda@2023
group: DEFAULT_GROUP # 默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置
file-extension: yml #默认properties
# 共享配置
From dae359655abd8112dfd06f6f880143a3ec6ab003 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=8E=8B=E5=A5=8E=E5=85=B4?= <2220574228@qq.com>
Date: Tue, 30 Dec 2025 10:56:42 +0800
Subject: [PATCH 10/13] =?UTF-8?q?nacos=E4=BF=AE=E6=94=B9;?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
mhd-gateway/src/main/resources/bootstrap.yml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/mhd-gateway/src/main/resources/bootstrap.yml b/mhd-gateway/src/main/resources/bootstrap.yml
index 01a76c684..9ac160956 100644
--- a/mhd-gateway/src/main/resources/bootstrap.yml
+++ b/mhd-gateway/src/main/resources/bootstrap.yml
@@ -18,7 +18,7 @@ spring:
# server-addr: 10.102.192.5:6848
# server-addr: 10.33.0.129:6010
#线上正式环境
- server-addr: 10.102.192.5:6848
+ server-addr: mhd-nacos:8848
username: nacos
password: manhuoda@2023
config:
@@ -27,11 +27,11 @@ spring:
# server-addr: 10.102.192.5:6848
# server-addr: 10.33.0.129:6010
#线上正式环境
- server-addr: 10.102.192.5:6848
+ server-addr: mhd-nacos:8848
username: nacos
password: manhuoda@2023
group: DEFAULT_GROUP # 默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置
file-extension: yml #默认properties
# 共享配置
shared-configs:
- - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
\ No newline at end of file
From 04d5ef1645315ddfa74166c70c4bf686cca5bd9a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=8E=8B=E5=A5=8E=E5=85=B4?= <2220574228@qq.com>
Date: Tue, 30 Dec 2025 13:18:57 +0800
Subject: [PATCH 11/13] =?UTF-8?q?nacos=E4=BF=AE=E6=94=B9;?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
mhd-gateway/src/main/resources/bootstrap.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/mhd-gateway/src/main/resources/bootstrap.yml b/mhd-gateway/src/main/resources/bootstrap.yml
index 9ac160956..2d80c4c78 100644
--- a/mhd-gateway/src/main/resources/bootstrap.yml
+++ b/mhd-gateway/src/main/resources/bootstrap.yml
@@ -18,7 +18,7 @@ spring:
# server-addr: 10.102.192.5:6848
# server-addr: 10.33.0.129:6010
#线上正式环境
- server-addr: mhd-nacos:8848
+ server-addr: 10.102.192.5:6848
username: nacos
password: manhuoda@2023
config:
@@ -27,7 +27,7 @@ spring:
# server-addr: 10.102.192.5:6848
# server-addr: 10.33.0.129:6010
#线上正式环境
- server-addr: mhd-nacos:8848
+ server-addr: 10.102.192.5:6848
username: nacos
password: manhuoda@2023
group: DEFAULT_GROUP # 默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置
From 29b24e845099e1dbb8a165b8963bbe6e75c47a72 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=8E=8B=E5=A5=8E=E5=85=B4?= <2220574228@qq.com>
Date: Tue, 30 Dec 2025 13:50:37 +0800
Subject: [PATCH 12/13] =?UTF-8?q?nacos=E4=BF=AE=E6=94=B9;?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
mhd_finance/src/main/resources/bootstrap.yml | 10 +++++++---
mhd_product/src/main/resources/bootstrap.yml | 10 +++++++---
mhd_thrid_party/src/main/resources/bootstrap.yml | 10 +++++++---
mhd_transport/src/main/resources/bootstrap.yml | 13 +++++++------
4 files changed, 28 insertions(+), 15 deletions(-)
diff --git a/mhd_finance/src/main/resources/bootstrap.yml b/mhd_finance/src/main/resources/bootstrap.yml
index 3845ee8d6..8132a55fb 100644
--- a/mhd_finance/src/main/resources/bootstrap.yml
+++ b/mhd_finance/src/main/resources/bootstrap.yml
@@ -20,18 +20,22 @@ spring:
discovery:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
- server-addr: 10.33.0.129:6010
+ server-addr: 10.102.192.5:6848
+ username: nacos
+ password: manhuoda@2023
#线上正式环境
# server-addr: 10.102.192.105:6848
config:
# server-addr: 127.0.0.1:8848
# server-addr: 116.204.23.92:8848
# 线上测试环境配置 容器名+端口号
- server-addr: 10.33.0.129:6010
+ server-addr: 10.102.192.5:6848
+ username: nacos
+ password: manhuoda@2023
#线上正式环境
# server-addr: 10.102.192.105:6848
group: DEFAULT_GROUP # 默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置
file-extension: yml #默认properties
# 共享配置
shared-configs:
- - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
\ No newline at end of file
diff --git a/mhd_product/src/main/resources/bootstrap.yml b/mhd_product/src/main/resources/bootstrap.yml
index 10e613084..fab856199 100644
--- a/mhd_product/src/main/resources/bootstrap.yml
+++ b/mhd_product/src/main/resources/bootstrap.yml
@@ -20,17 +20,21 @@ spring:
discovery:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
- server-addr: 10.33.0.129:6010
+ server-addr: 10.102.192.5: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.102.192.5:6848
+ username: nacos
+ password: manhuoda@2023
#线上正式环境
# server-addr: 10.102.192.105:6848
group: DEFAULT_GROUP # 默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置
file-extension: yml #默认properties
# 共享配置
shared-configs:
- - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
\ No newline at end of file
diff --git a/mhd_thrid_party/src/main/resources/bootstrap.yml b/mhd_thrid_party/src/main/resources/bootstrap.yml
index a0f470634..da96ce5bb 100644
--- a/mhd_thrid_party/src/main/resources/bootstrap.yml
+++ b/mhd_thrid_party/src/main/resources/bootstrap.yml
@@ -20,17 +20,21 @@ spring:
discovery:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置 容器名+端口号
- server-addr: 10.33.0.129:6010
+ server-addr: 10.102.192.5: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.102.192.5:6848
+ username: nacos
+ password: manhuoda@2023
#线上正式环境
# server-addr: 10.102.192.105:6848
group: DEFAULT_GROUP # 默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置
file-extension: yml #默认properties
# 共享配置
shared-configs:
- - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
\ No newline at end of file
diff --git a/mhd_transport/src/main/resources/bootstrap.yml b/mhd_transport/src/main/resources/bootstrap.yml
index 5dfc4e3aa..1bdd007fd 100644
--- a/mhd_transport/src/main/resources/bootstrap.yml
+++ b/mhd_transport/src/main/resources/bootstrap.yml
@@ -21,13 +21,17 @@ spring:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置使用ip+端口号
# server-addr: 10.33.0.129:6010r
- server-addr: 10.33.0.129:6010
+ server-addr: 10.102.192.5:6848
+ username: nacos
+ password: manhuoda@2023
#线上正式环境
# server-addr: 10.102.192.105:6848
config:
# server-addr: 127.0.0.1:8848
# 线上测试环境配置使用ip+端口号
- server-addr: 10.33.0.129:6010
+ server-addr: 10.102.192.5:6848
+ username: nacos
+ password: manhuoda@2023
# server-addr: 10.33.0.129:6010
#线上正式环境
# server-addr: 10.102.192.105:6848
@@ -35,7 +39,4 @@ spring:
file-extension: yml #默认properties
# 共享配置
shared-configs:
- - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
-
-
-
+ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
\ No newline at end of file
From 4b427e1b2ef788e8f1bf2d772b12653b0d1d0c28 Mon Sep 17 00:00:00 2001
From: 1745237360-cloud <1745237360@qq.com>
Date: Sat, 10 Jan 2026 16:39:33 +0800
Subject: [PATCH 13/13] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90?=
=?UTF-8?q?=E7=9A=84=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../core/domain/entity/Verification.java | 2 +
.../common/core/domain/po/AddressBookPo.java | 3 +
.../com/mhd/common/core/domain/po/RolePO.java | 4 +
.../core/domain/po/UserDriverListPo.java | 2 +
.../common/core/domain/po/VerificationPo.java | 2 +
.../AddressBookApplicationService.java | 57 +++-
.../ContainerApplicationService.java | 33 +-
.../ExpenseAccountApplicationService.java | 142 ++++++++-
.../ServiceItemsManageApplicationService.java | 192 +++++++++++-
.../WarehouseApplicationService.java | 7 +
.../addressBook/todo/CommonRouteDo.java | 3 +
.../persistence/ExpenseAccountImpl.java | 12 +-
.../repository/po/QueryExpenseAccountPO.java | 11 +
.../todo/SearchExpenseAccountDO.java | 6 +
.../facade/IServiceItemsManageService.java | 2 +-
.../mapper/ServiceItemsManageMapper.java | 2 +-
.../persistence/ServiceItemsManageImpl.java | 76 ++++-
.../ServiceItemsManageDomainService.java | 2 +-
.../ExpenseAccountAssembler.java | 53 +++-
.../ServiceItemsManageAssembler.java | 57 +++-
.../expenseAccount/ExpenseAccountApi.java | 54 +++-
.../service/impl/SysDictDataServiceImpl.java | 41 ++-
.../mapper/basic/ExpenseAccountMapper.xml | 20 +-
.../mapper/basic/ServiceItemsManageMapper.xml | 38 ++-
.../addressBook/UserConfigSwitchInterface.xml | 7 +
.../addressBook/UserFormConfigInterface.xml | 46 +--
.../service/MotorcadeApplicationService.java | 295 +++++++++++++++++-
.../service/OpenUserApplicationService.java | 4 +
.../service/RoleApplicationService.java | 193 +++++++++++-
.../service/UserApplicationService.java | 131 +++++++-
.../service/UserDriverApplicationService.java | 116 +++++++
.../UserShipperApplicationService.java | 170 ++++++++--
.../facade/MotorcadeRepositoryInterface.java | 2 +-
.../repository/mapper/MotorcadeMapper.java | 2 +-
.../persistence/MotorcadeRepositoryImpl.java | 4 +-
.../service/MotorcadeDomainService.java | 8 +-
.../roleAggregate/entity/RoleEntity.java | 4 +
.../roleAggregate/repository/todo/RoleDo.java | 4 +
.../entity/UserDriverEntity.java | 19 ++
.../entity/UserShipperEntity.java | 9 +
.../factory/UserDriverFactory.java | 10 +
.../facade/UserRepositoryInterface.java | 2 +-
.../repository/mapper/UserMapper.java | 2 +-
.../persistence/UserRepositoryImpl.java | 4 +-
.../repository/po/UserShipperPo.java | 6 +-
.../service/UserDomainService.java | 4 +-
.../service/UserDriverDomainService.java | 62 +++-
.../service/UserShipperDomainService.java | 7 +-
.../service/UserWlhyDomainService.java | 28 +-
.../interfaces/vo/QueryAllShipperInfoVo.java | 6 +
.../main/resources/mapper/MotorcadeMapper.xml | 33 +-
.../src/main/resources/mapper/RoleMapper.xml | 13 +
.../resources/mapper/UserDriverMapper.xml | 5 +-
.../src/main/resources/mapper/UserMapper.xml | 21 +-
.../resources/mapper/UserShipperMapper.xml | 3 +-
.../BusinessDocumentApplicationService.java | 64 +++-
.../ReceivingAccountApplicationService.java | 9 +-
.../ReconciliationApplicationService.java | 67 +++-
.../TmsReceiptApplicationService.java | 77 ++++-
.../InvoiceInfoManageApplicationService.java | 6 +
...venueExpensesRecordApplicationService.java | 6 +
.../VerificationApplicationService.java | 78 +++--
.../service/InvoiceOrderDomainService.java | 5 +
.../mapper/ReceivingAccountMapper.java | 10 +
.../ReceivingAccountRepository.java | 11 +
.../finance/interfaces/dto/TmsReceiptDTO.java | 29 +-
.../businessDocument/BusinessDocumentApi.java | 2 +
.../facadeApp/tmsReceipt/TmsReceiptApi.java | 80 +++++
.../ReceivingAccountMapper.xml | 27 +-
.../reconciliation/ReconciliationMapper.xml | 13 +
.../RevenueExpensesRecordMapper.xml | 4 -
.../mapper/tmsReceipt/TmsReceiptMapper.xml | 16 +
.../verification/VerificationMapper.xml | 295 ++++++++++--------
.../service/menu/MenuApplicationService.java | 5 +-
.../OrganizationApplicationService.java | 52 ++-
.../repository/po/OrganizationPo.java | 2 +
.../vehicle/VehicleApplicationService.java | 240 +++++++++++---
.../inBoundOrder/InboundOrderService.java | 43 ++-
.../warehouse/inventory/InventoryService.java | 56 +++-
.../InventoryLedgerService.java | 36 ++-
.../command/CreateMaterialCommand.java | 2 +
.../command/MaterialCommandService.java | 4 +-
.../command/UpdateMaterialCommand.java | 2 +
.../material/query/MaterialQueryCommand.java | 6 +
.../material/query/MaterialQueryService.java | 100 +++++-
.../warehouse/material/vo/MaterialVO.java | 6 +
.../outBoundOrder/OutboundOrderService.java | 44 ++-
.../service/VehicleWlhyDomainService.java | 14 +-
.../warehouse/material/model/Material.java | 12 +-
.../repository/MaterialRepository.java | 6 +-
.../persistence/InventoryMapper.java | 4 +-
.../material/persistence/MaterialDO.java | 2 +
.../repository/MaterialRepositoryImpl.java | 20 +-
.../dto/warehouse/inventory/InventoryDTO.java | 3 +-
.../facadeApi/warehouse/MaterialApi.java | 13 +
.../mapper/inventory/InventoryMapper.xml | 8 +
.../mapper/vehicle/VehicleMapper.xml | 2 +-
97 files changed, 3056 insertions(+), 466 deletions(-)
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/entity/Verification.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/entity/Verification.java
index 56a011260..d09b27d2a 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/entity/Verification.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/entity/Verification.java
@@ -99,6 +99,8 @@ public class Verification extends BaseVOEntity implements Serializable,Cloneable
private Long topOrganizationId;
@ApiModelProperty("组织表ID")
private Long organizationId;
+ @ApiModelProperty("组织名称")
+ private String organizationName;
// @ApiModelProperty("是否月结:1-是,2-否")
// private Integer receivableType;
@ApiModelProperty("部门id")
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/po/AddressBookPo.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/po/AddressBookPo.java
index 5028dff9f..f04b4e021 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/po/AddressBookPo.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/po/AddressBookPo.java
@@ -56,4 +56,7 @@ public class AddressBookPo extends BaseVOEntity implements Serializable
private String synthesize;
@ApiModelProperty(name = "单位名称")
private String unitName;
+
+ @ApiModelProperty(name = "组织ID(用于数据权限过滤,内部使用)", hidden = true)
+ private Long organizationId;
}
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/po/RolePO.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/po/RolePO.java
index 63164877c..e56b39c52 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/po/RolePO.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/po/RolePO.java
@@ -24,6 +24,10 @@ public class RolePO extends BaseVOEntity implements Serializable {
private String roleTypeName = "";
@ApiModelProperty(name = "组织表ID")
private Long organizationId = 0L;
+ @ApiModelProperty(name = "组织名称")
+ private String organizationName = "";
+ @ApiModelProperty(name = "一级组织表ID")
+ private Long topOrganizationId = 0L;
@ApiModelProperty(name = "职务/角色权限字符,控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasRole('admin')`)")
private String roleCode = "";
@ApiModelProperty(name = "职务/角色名称")
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/po/UserDriverListPo.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/po/UserDriverListPo.java
index 81bcbabf3..20995faf3 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/po/UserDriverListPo.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/po/UserDriverListPo.java
@@ -28,6 +28,8 @@ public class UserDriverListPo {
private String driverEnterpriseName="";
@ApiModelProperty(name = "登录账号(2-20位)")
private String userAccount = "";
+ @ApiModelProperty(name = "组织表ID")
+ private Long organizationId;
@ApiModelProperty(name = "组织名称")
private String organizationName = "";
@ApiModelProperty(name = "身份证号")
diff --git a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/po/VerificationPo.java b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/po/VerificationPo.java
index 89f5af964..c43940daa 100644
--- a/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/po/VerificationPo.java
+++ b/mhd-common/mhd-common-core/src/main/java/com/mhd/common/core/domain/po/VerificationPo.java
@@ -99,6 +99,8 @@ public class VerificationPo extends BaseVOEntity implements Serializable
private Long topOrganizationId;
@ApiModelProperty("组织表ID")
private Long organizationId;
+ @ApiModelProperty("组织名称")
+ private String organizationName;
// @ApiModelProperty("是否月结:1-是,2-否")
// private Integer receivableType;
@ApiModelProperty("部门id")
diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/addressBook/AddressBookApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/addressBook/AddressBookApplicationService.java
index 1cace33ca..f920ef5b2 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/addressBook/AddressBookApplicationService.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/addressBook/AddressBookApplicationService.java
@@ -69,9 +69,37 @@ public class AddressBookApplicationService
// 获取登录人id
Long userId = SecurityUtils.getLoginUser().getUserid();
addressBookPo.setUserId(userId);
+
+ // 添加组织数据权限过滤
+ applyOrganizationDataPermissionForAddressBook(addressBookPo);
+
return addressBookDomainService.selectAddressBookList(addressBookPo);
}
+ /**
+ * 应用组织数据权限过滤(地址簿)
+ * 通过用户表关联来过滤组织数据
+ */
+ private void applyOrganizationDataPermissionForAddressBook(AddressBookPo addressBookPo) {
+ try {
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
+
+ // 如果当前登录用户的organizationId为2827(南光组织),可以查询全部组织数据
+ // 其他组织只能查询自己组织的数据
+ if (loginUserOrganizationId != null && !loginUserOrganizationId.equals(2827L)) {
+ // 其他组织:需要通过用户表关联来过滤,只查询同一组织下用户创建的地址簿
+ // 由于AddressBook表只有userId字段,需要在XML中通过用户表关联来过滤
+ addressBookPo.setOrganizationId(loginUserOrganizationId);
+ }
+ // 如果是2827组织,不设置organizationId,可以查询全部
+ }
+ } catch (Exception e) {
+ // 如果获取登录用户信息失败,不添加过滤条件,避免影响正常查询
+ }
+ }
+
/**
* 新增地址簿
*
@@ -156,12 +184,39 @@ public class AddressBookApplicationService
*/
public List selectCommonRouteList(CommonRouteDo commonRouteDo){
// 获取登录人id
-// Long userId = SecurityUtils.getUserId()==0 ? 4L:SecurityUtils.getLoginUser().getUserid();
Long userId = SecurityUtils.getLoginUser().getUserid();
commonRouteDo.setCreateBy(userId);
+
+ // 添加组织数据权限过滤
+ applyOrganizationDataPermissionForCommonRoute(commonRouteDo);
+
return commonRouteDomainService.selectCommonRouteList(commonRouteDo);
}
+ /**
+ * 应用组织数据权限过滤(常用路线)
+ * 通过用户表关联来过滤组织数据
+ */
+ private void applyOrganizationDataPermissionForCommonRoute(CommonRouteDo commonRouteDo) {
+ try {
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
+
+ // 如果当前登录用户的organizationId为2827(南光组织),可以查询全部组织数据
+ // 其他组织只能查询自己组织的数据
+ if (loginUserOrganizationId != null && !loginUserOrganizationId.equals(2827L)) {
+ // 其他组织:需要通过用户表关联来过滤,只查询同一组织下用户创建的常用路线
+ // 由于CommonRoute表只有userId字段,需要在XML中通过用户表关联来过滤
+ commonRouteDo.setOrganizationId(loginUserOrganizationId);
+ }
+ // 如果是2827组织,不设置organizationId,可以查询全部
+ }
+ } catch (Exception e) {
+ // 如果获取登录用户信息失败,不添加过滤条件,避免影响正常查询
+ }
+ }
+
/**
* 新增常用路线
*
diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/container/ContainerApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/container/ContainerApplicationService.java
index 0a78475d1..ca2a60370 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/container/ContainerApplicationService.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/container/ContainerApplicationService.java
@@ -38,10 +38,30 @@ public class ContainerApplicationService {
public List queryList(ContainerDO containerDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
- if (loginUser != null){
+ if (loginUser != null && loginUser.getUserPo() != null){
+ Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
- if (topOrganizationId != null && topOrganizationId != 1){
- containerDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
+
+ // 数据权限:根据organizationId来设置查询权限
+ // organizationId等于2827时查询全部,其他仅查询各自组织的信息
+ if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
+ // 南光组织(organizationId=2827):可以查询所有组织的数据
+ // 如果前端传递了 organizationId,使用前端传递的值进行过滤
+ // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
+ if (containerDO.getOrganizationId() == null) {
+ containerDO.setOrganizationId(null);
+ containerDO.setTopOrganizationId(null);
+ }
+ } else {
+ // 其他组织:设置organizationId,只查询当前组织的数据
+ if (topOrganizationId != null && topOrganizationId != 1){
+ containerDO.setTopOrganizationId(topOrganizationId);
+ }
+ // 如果前端传递了organizationId,验证是否与当前登录用户的组织ID一致
+ if (containerDO.getOrganizationId() != null && !containerDO.getOrganizationId().equals(loginUserOrganizationId)) {
+ // 前端传递了其他组织的organizationId,强制使用当前登录用户的组织ID,防止越权查询
+ containerDO.setOrganizationId(loginUserOrganizationId);
+ }
}
}
return containerDomainService.queryList(containerDO);
@@ -52,6 +72,13 @@ public class ContainerApplicationService {
* 新增容器管理
*/
public Boolean insert(ContainerDO containerDO) {
+ // 设置当前登录用户的组织信息
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ containerDO.setOrganizationId(loginUser.getUserPo().getOrganizationId());
+ containerDO.setOrganizationName(loginUser.getUserPo().getOrganizationName());
+ containerDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
+ }
//翻译库区类型
setDataDict(containerDO);
return containerDomainService.insert(containerDO);
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 b378d04bd..cd30f83b4 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
@@ -22,6 +22,7 @@ import com.mhd.common.core.web.domain.AjaxResult;
import com.mhd.common.security.utils.SecurityUtils;
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.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -50,29 +51,117 @@ public class ExpenseAccountApplicationService {
/**
* 分页查询费用科目列表
*/
-
public List queryList(ExpenseAccountDO expenseAccountDO) {
- setTopOrganizationIdLogin(expenseAccountDO);
- return expenseAccountDomainService.queryList(expenseAccountDO);
+ try {
+ log.info("开始查询费用科目列表,参数:organizationId={}, topOrganizationId={}, expenseAccountDO={}",
+ expenseAccountDO.getOrganizationId(), expenseAccountDO.getTopOrganizationId(), expenseAccountDO);
+ setDataPermission(expenseAccountDO);
+
+ // 处理 createByName 和 updateByName 字段:
+ // 问题:ExpenseAccountAssembler 在查询场景下会自动设置 createByName 和 updateByName 为当前登录用户名
+ // 这会导致 SQL 中添加 create_by_name LIKE '%nanguang%' 和 update_by_name LIKE '%nanguang%' 条件
+ // 解决方案:
+ // 1. 如果查询所有组织(organizationId 和 topOrganizationId 都为 null),清空这些字段
+ // 2. 如果查询指定组织(organizationId 不为 null),且是南光组织查询,如果 createByName 或 updateByName 等于当前登录用户名,清空它们
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
+ String currentUserName = loginUser.getUsername();
+
+ if (expenseAccountDO.getOrganizationId() == null && expenseAccountDO.getTopOrganizationId() == null) {
+ // 查询所有组织的数据时,不应该通过创建者或更新者来过滤,清空这些字段
+ log.info("查询所有组织数据,清空 createByName 和 updateByName 过滤条件,避免限制查询结果");
+ expenseAccountDO.setCreateByName(null);
+ expenseAccountDO.setUpdateByName(null);
+ } else if (expenseAccountDO.getOrganizationId() != null && loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
+ // 南光组织查询指定组织时,如果 createByName 或 updateByName 等于当前登录用户名,说明可能是 Assembler 自动设置的
+ // 清空这些字段,避免限制查询结果(因为其他组织的数据可能不是当前登录用户创建的)
+ if (currentUserName != null) {
+ if (expenseAccountDO.getCreateByName() != null && expenseAccountDO.getCreateByName().equals(currentUserName)) {
+ log.info("南光组织查询指定组织数据(organizationId={}),清空 createByName 过滤条件(可能由 Assembler 自动设置)",
+ expenseAccountDO.getOrganizationId());
+ expenseAccountDO.setCreateByName(null);
+ }
+ if (expenseAccountDO.getUpdateByName() != null && expenseAccountDO.getUpdateByName().equals(currentUserName)) {
+ log.info("南光组织查询指定组织数据(organizationId={}),清空 updateByName 过滤条件(可能由 Assembler 自动设置)",
+ expenseAccountDO.getOrganizationId());
+ expenseAccountDO.setUpdateByName(null);
+ }
+ }
+ }
+ }
+
+ log.info("设置组织ID后,查询参数:organizationId={}, topOrganizationId={}, createByName={}, updateByName={}",
+ expenseAccountDO.getOrganizationId(), expenseAccountDO.getTopOrganizationId(),
+ expenseAccountDO.getCreateByName(), expenseAccountDO.getUpdateByName());
+ List result = expenseAccountDomainService.queryList(expenseAccountDO);
+ log.info("查询费用科目列表成功,返回数据条数:{}", result != null ? result.size() : 0);
+ return result;
+ } catch (Exception e) {
+ log.error("查询费用科目列表异常", e);
+ throw e;
+ }
}
public List treeCostSubject(ExpenseAccountDO expenseAccountDO){
- setTopOrganizationIdLogin(expenseAccountDO);
+ setDataPermission(expenseAccountDO);
return expenseAccountDomainService.treeCostSubject(expenseAccountDO);
}
public List subjectTreeCost(ExpenseAccountDO expenseAccountDO){
- setTopOrganizationIdLogin(expenseAccountDO);
+ setDataPermission(expenseAccountDO);
return expenseAccountDomainService.treeCostSubject(expenseAccountDO);
}
-
- private void setTopOrganizationIdLogin(ExpenseAccountDO expenseAccountDO){
+ /**
+ * 根据当前登录用户的组织信息实现数据隔离
+ * 当前登录用户为组织ID字段organization_id为2827时可查全部组织数据,其他组织只能查自己
+ */
+ private void setDataPermission(ExpenseAccountDO expenseAccountDO){
LoginUser loginUser = SecurityUtils.getLoginUser();
- if (loginUser != null){
- Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
- if (topOrganizationId != null && topOrganizationId != 1){
- expenseAccountDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
+ if (loginUser == null || loginUser.getUserPo() == null) {
+ log.warn("费用科目查询 - 未获取到登录用户信息,跳过数据权限过滤");
+ return;
+ }
+
+ UserPo userPo = loginUser.getUserPo();
+ Long loginUserOrganizationId = userPo.getOrganizationId();
+ Long topOrganizationId = userPo.getTopOrganizationId();
+
+ // 先保存前端传递的 organizationId(如果存在)
+ Long frontendOrganizationId = expenseAccountDO.getOrganizationId();
+
+ // 数据权限:根据 organizationId 来设置查询权限
+ // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己
+ if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
+ // 南光组织(organizationId=2827):可以查询所有组织的数据
+ // 如果前端传递了 organizationId,使用前端传递的值进行过滤
+ // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
+ if (frontendOrganizationId != null) {
+ expenseAccountDO.setOrganizationId(frontendOrganizationId);
+ expenseAccountDO.setTopOrganizationId(null);
+ } else {
+ expenseAccountDO.setOrganizationId(null);
+ expenseAccountDO.setTopOrganizationId(null);
+ }
+ } else {
+ // 其他组织:设置 organizationId,只查询当前组织的数据
+ if (frontendOrganizationId != null) {
+ // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致
+ if (!frontendOrganizationId.equals(loginUserOrganizationId)) {
+ log.warn("费用科目查询 - 前端传递的组织ID {} 与当前登录用户的组织ID {} 不一致,使用当前登录用户的组织ID进行过滤",
+ frontendOrganizationId, loginUserOrganizationId);
+ expenseAccountDO.setOrganizationId(loginUserOrganizationId);
+ } else {
+ expenseAccountDO.setOrganizationId(frontendOrganizationId);
+ }
+ expenseAccountDO.setTopOrganizationId(topOrganizationId);
+ } else {
+ // 前端没有传递 organizationId,使用当前登录用户的组织ID
+ if (loginUserOrganizationId != null) {
+ expenseAccountDO.setOrganizationId(loginUserOrganizationId);
+ }
+ expenseAccountDO.setTopOrganizationId(topOrganizationId);
}
}
}
@@ -287,12 +376,43 @@ public class ExpenseAccountApplicationService {
}
public List selectExpenseAccount(SearchExpenseAccountDO searchExpenseAccountDO){
+ setDataPermissionForSearch(searchExpenseAccountDO);
return expenseAccountDomainService.selectExpenseAccount(searchExpenseAccountDO);
}
public List selectOtherExpenseAccount(SearchExpenseAccountDO searchExpenseAccountDO){
+ setDataPermissionForSearch(searchExpenseAccountDO);
return expenseAccountDomainService.selectOtherExpenseAccount(searchExpenseAccountDO);
}
+
+ /**
+ * 为 SearchExpenseAccountDO 设置数据权限
+ */
+ private void setDataPermissionForSearch(SearchExpenseAccountDO searchExpenseAccountDO) {
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser == null || loginUser.getUserPo() == null) {
+ log.warn("费用科目查询 - 未获取到登录用户信息,跳过数据权限过滤");
+ return;
+ }
+
+ UserPo userPo = loginUser.getUserPo();
+ Long loginUserOrganizationId = userPo.getOrganizationId();
+ Long topOrganizationId = userPo.getTopOrganizationId();
+
+ // 数据权限:根据 organizationId 来设置查询权限
+ // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己
+ if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
+ // 南光组织(organizationId=2827):可以查询所有组织的数据,不设置组织过滤条件
+ searchExpenseAccountDO.setOrganizationId(null);
+ searchExpenseAccountDO.setTopOrganizationId(null);
+ } else {
+ // 其他组织:只查询当前组织的数据
+ if (loginUserOrganizationId != null) {
+ searchExpenseAccountDO.setOrganizationId(loginUserOrganizationId);
+ }
+ searchExpenseAccountDO.setTopOrganizationId(topOrganizationId);
+ }
+ }
public List selectSocialVehicleExpenseAccount(){
return expenseAccountDomainService.selectSocialVehicleExpenseAccount();
diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/serviceItemsManage/ServiceItemsManageApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/serviceItemsManage/ServiceItemsManageApplicationService.java
index d5b11e06b..16ef28e33 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/serviceItemsManage/ServiceItemsManageApplicationService.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/serviceItemsManage/ServiceItemsManageApplicationService.java
@@ -35,24 +35,190 @@ public class ServiceItemsManageApplicationService {
/**
* 分页查询服务项管理列表
*/
-
public List queryList(ServiceItemsManageDO serviceItemsManageDO) {
- setTopOrganizationIdLogin(serviceItemsManageDO);
- return serviceItemsManageDomainService.queryList(serviceItemsManageDO);
+ try {
+ log.info("开始查询服务项管理列表,参数:organizationId={}, topOrganizationId={}, serviceItemsManageDO={}",
+ serviceItemsManageDO.getOrganizationId(), serviceItemsManageDO.getTopOrganizationId(), serviceItemsManageDO);
+
+ // 先保存前端传递的 organizationId 和 topOrganizationId(如果存在)
+ // 注意:这里需要在设置权限逻辑之前保存,因为 Assembler 可能已经设置了这些值
+ Long frontendOrganizationId = serviceItemsManageDO.getOrganizationId();
+ Long frontendTopOrganizationId = serviceItemsManageDO.getTopOrganizationId();
+
+ // 获取登录用户信息
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ Long loginUserOrganizationId = null;
+ Long loginUserTopOrganizationId = null;
+
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
+ loginUserTopOrganizationId = loginUser.getUserPo().getTopOrganizationId();
+ }
+
+ log.info("登录用户信息:loginUserOrganizationId={}, loginUserTopOrganizationId={}, 前端传递:frontendOrganizationId={}, frontendTopOrganizationId={}",
+ loginUserOrganizationId, loginUserTopOrganizationId, frontendOrganizationId, frontendTopOrganizationId);
+
+ // 数据权限:根据 organizationId 来设置查询权限
+ // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己
+ if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
+ // 南光组织(organizationId=2827):可以查询所有组织的数据
+ // 如果前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤
+ // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
+ if (frontendOrganizationId != null) {
+ // 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤
+ serviceItemsManageDO.setOrganizationId(frontendOrganizationId);
+ serviceItemsManageDO.setTopOrganizationId(null); // 明确设置为 null,避免使用 topOrganizationId 条件
+ log.info("南光组织查询指定组织:organizationId={}", frontendOrganizationId);
+ } else {
+ // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
+ serviceItemsManageDO.setOrganizationId(null);
+ serviceItemsManageDO.setTopOrganizationId(null);
+ log.info("南光组织查询所有组织:不设置组织过滤条件");
+ }
+ } else {
+ // 其他组织:设置organizationId,只查询当前组织的数据
+ // 其他组织只能查询自己组织的数据,不能查询其他组织的数据
+ if (frontendOrganizationId != null) {
+ // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致
+ if (!frontendOrganizationId.equals(loginUserOrganizationId)) {
+ // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询
+ log.warn("服务项管理查询 - 前端传递的组织ID {} 与当前登录用户的组织ID {} 不一致,使用当前登录用户的组织ID进行过滤",
+ frontendOrganizationId, loginUserOrganizationId);
+ serviceItemsManageDO.setOrganizationId(loginUserOrganizationId);
+ } else {
+ // 前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值
+ serviceItemsManageDO.setOrganizationId(frontendOrganizationId);
+ }
+ if (loginUserTopOrganizationId != null) {
+ serviceItemsManageDO.setTopOrganizationId(loginUserTopOrganizationId);
+ }
+ } else {
+ // 前端没有传递 organizationId,使用当前登录用户的组织ID
+ if (loginUserOrganizationId != null) {
+ serviceItemsManageDO.setOrganizationId(loginUserOrganizationId);
+ }
+ if (loginUserTopOrganizationId != null) {
+ serviceItemsManageDO.setTopOrganizationId(loginUserTopOrganizationId);
+ }
+ }
+ }
+
+ // 处理 createByName 和 updateByName 字段:
+ // 问题:Assembler 在查询场景下(serviceItemsManageId == null)会自动设置 createByName 和 updateByName 为当前登录用户名
+ // 这会导致 SQL 中添加 create_by_name LIKE '%nanguang%' 和 update_by_name LIKE '%nanguang%' 条件
+ // 解决方案:
+ // 1. 如果查询所有组织(organizationId 和 topOrganizationId 都为 null),清空这些字段
+ // 2. 如果查询指定组织(organizationId 不为 null),且是南光组织查询,如果 createByName 或 updateByName 等于当前登录用户名,清空它们
+ // 因为查询其他组织的数据时,不应该通过当前登录用户的名称来过滤
+ // 注意:这种方法可能会误判(如果前端确实传递了当前登录用户名作为查询条件),但这种情况很少见,且影响较小
+
+ String currentUserName = null;
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ currentUserName = loginUser.getUsername();
+ }
+
+ if (serviceItemsManageDO.getOrganizationId() == null && serviceItemsManageDO.getTopOrganizationId() == null) {
+ // 查询所有组织的数据时,不应该通过创建者或更新者来过滤,清空这些字段
+ log.info("查询所有组织数据,清空 createByName 和 updateByName 过滤条件,避免限制查询结果");
+ serviceItemsManageDO.setCreateByName(null);
+ serviceItemsManageDO.setUpdateByName(null);
+ } else if (serviceItemsManageDO.getOrganizationId() != null && loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
+ // 南光组织查询指定组织时,如果 createByName 或 updateByName 等于当前登录用户名,说明可能是 Assembler 自动设置的
+ // 清空这些字段,避免限制查询结果(因为其他组织的数据可能不是当前登录用户创建的)
+ if (currentUserName != null) {
+ if (serviceItemsManageDO.getCreateByName() != null && serviceItemsManageDO.getCreateByName().equals(currentUserName)) {
+ log.info("南光组织查询指定组织数据(organizationId={}),清空 createByName 过滤条件(可能由 Assembler 自动设置)",
+ serviceItemsManageDO.getOrganizationId());
+ serviceItemsManageDO.setCreateByName(null);
+ }
+ if (serviceItemsManageDO.getUpdateByName() != null && serviceItemsManageDO.getUpdateByName().equals(currentUserName)) {
+ log.info("南光组织查询指定组织数据(organizationId={}),清空 updateByName 过滤条件(可能由 Assembler 自动设置)",
+ serviceItemsManageDO.getOrganizationId());
+ serviceItemsManageDO.setUpdateByName(null);
+ }
+ }
+ }
+
+ log.info("设置组织ID后,查询参数:organizationId={}, topOrganizationId={}, createByName={}, updateByName={}",
+ serviceItemsManageDO.getOrganizationId(), serviceItemsManageDO.getTopOrganizationId(),
+ serviceItemsManageDO.getCreateByName(), serviceItemsManageDO.getUpdateByName());
+ List result = serviceItemsManageDomainService.queryList(serviceItemsManageDO);
+ log.info("查询服务项管理列表成功,返回数据条数:{}", result != null ? result.size() : 0);
+ return result;
+ } catch (Exception e) {
+ log.error("查询服务项管理列表异常", e);
+ throw e;
+ }
}
public List getCostTypeList(ServiceItemsManageDO serviceItemsManageDO){
- setTopOrganizationIdLogin(serviceItemsManageDO);
- return serviceItemsManageDomainService.getCostsType(serviceItemsManageDO);
- }
-
- private void setTopOrganizationIdLogin(ServiceItemsManageDO serviceItemsManageDO){
- LoginUser loginUser = SecurityUtils.getLoginUser();
- if (loginUser != null){
- Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
- if (topOrganizationId != null && topOrganizationId != 1){
- serviceItemsManageDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
+ try {
+ log.info("开始查询费用类别列表,参数:{}", serviceItemsManageDO);
+
+ // 先保存前端传递的 organizationId(如果存在)
+ Long frontendOrganizationId = serviceItemsManageDO.getOrganizationId();
+
+ // 获取登录用户信息
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ Long loginUserOrganizationId = null;
+ Long topOrganizationId = null;
+
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
+ topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
}
+
+ // 数据权限:根据 organizationId 来设置查询权限
+ // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己
+ if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
+ // 南光组织(organizationId=2827):可以查询所有组织的数据
+ // 如果前端传递了 organizationId(包括2827),使用前端传递的值进行过滤
+ // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
+ if (frontendOrganizationId != null) {
+ // 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤
+ serviceItemsManageDO.setOrganizationId(frontendOrganizationId);
+ serviceItemsManageDO.setTopOrganizationId(null);
+ } else {
+ // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
+ serviceItemsManageDO.setOrganizationId(null);
+ serviceItemsManageDO.setTopOrganizationId(null);
+ }
+ } else {
+ // 其他组织:设置organizationId,只查询当前组织的数据
+ // 其他组织只能查询自己组织的数据,不能查询其他组织的数据
+ if (frontendOrganizationId != null) {
+ // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致
+ if (!frontendOrganizationId.equals(loginUserOrganizationId)) {
+ // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询
+ log.warn("费用类别查询 - 前端传递的组织ID {} 与当前登录用户的组织ID {} 不一致,使用当前登录用户的组织ID进行过滤",
+ frontendOrganizationId, loginUserOrganizationId);
+ serviceItemsManageDO.setOrganizationId(loginUserOrganizationId);
+ } else {
+ // 前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值
+ serviceItemsManageDO.setOrganizationId(frontendOrganizationId);
+ }
+ if (topOrganizationId != null) {
+ serviceItemsManageDO.setTopOrganizationId(topOrganizationId);
+ }
+ } else {
+ // 前端没有传递 organizationId,使用当前登录用户的组织ID
+ if (loginUserOrganizationId != null) {
+ serviceItemsManageDO.setOrganizationId(loginUserOrganizationId);
+ }
+ if (topOrganizationId != null) {
+ serviceItemsManageDO.setTopOrganizationId(topOrganizationId);
+ }
+ }
+ }
+
+ log.info("设置组织ID后,费用类别查询参数:organizationId={}, topOrganizationId={}",
+ serviceItemsManageDO.getOrganizationId(), serviceItemsManageDO.getTopOrganizationId());
+ List result = serviceItemsManageDomainService.getCostsType(serviceItemsManageDO);
+ log.info("查询费用类别列表成功,返回数据条数:{}", result != null ? result.size() : 0);
+ return result;
+ } catch (Exception e) {
+ log.error("查询费用类别列表异常", e);
+ throw e;
}
}
diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/warehouse/WarehouseApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/warehouse/WarehouseApplicationService.java
index 2ad5a508c..a3649948d 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/warehouse/WarehouseApplicationService.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/warehouse/WarehouseApplicationService.java
@@ -56,6 +56,13 @@ public class WarehouseApplicationService {
* 新增仓库
*/
public Boolean insert(WarehouseDO warehouseDO) {
+ // 设置当前登录用户的组织信息
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ warehouseDO.setOrganizationId(loginUser.getUserPo().getOrganizationId());
+ warehouseDO.setOrganizationName(loginUser.getUserPo().getOrganizationName());
+ warehouseDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
+ }
//设置数据字典键值
setDataDict(warehouseDO);
return warehouseDomainService.insert(warehouseDO);
diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/addressBook/todo/CommonRouteDo.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/addressBook/todo/CommonRouteDo.java
index 05e851b49..442805150 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/addressBook/todo/CommonRouteDo.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/addressBook/todo/CommonRouteDo.java
@@ -126,4 +126,7 @@ public class CommonRouteDo extends BaseVOEntity
@ApiModelProperty(name = "运费单价")
private BigDecimal freightUnitPrice;
+
+ @ApiModelProperty(name = "组织ID(用于数据权限过滤,内部使用)", hidden = true)
+ private Long organizationId;
}
diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/expenseAccount/repository/persistence/ExpenseAccountImpl.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/expenseAccount/repository/persistence/ExpenseAccountImpl.java
index 1bbc00df6..a65c6dd7d 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/expenseAccount/repository/persistence/ExpenseAccountImpl.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/expenseAccount/repository/persistence/ExpenseAccountImpl.java
@@ -10,6 +10,7 @@ import com.mhd.basic.domain.expenseAccount.repository.todo.ExpenseAccountDO;
import com.mhd.basic.domain.expenseAccount.repository.todo.ExpenseAccountDoMap;
import com.mhd.basic.domain.expenseAccount.repository.todo.SearchExpenseAccountDO;
import com.mhd.basic.interfaces.dto.expenseAccount.SearchExpenseAccountDTO;
+import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -24,6 +25,7 @@ import java.util.List;
* @author gen
* @date 2024-06-04
*/
+@Slf4j
@Service
public class ExpenseAccountImpl extends ServiceImpl implements IExpenseAccountService{
@Autowired
@@ -35,7 +37,15 @@ public class ExpenseAccountImpl extends ServiceImpl queryList(ExpenseAccountDO expenseAccountDO)
{
- return expenseAccountMapper.queryList(expenseAccountDO);
+ // 添加日志,记录查询参数
+ log.info("ExpenseAccountImpl.queryList 查询参数:topOrganizationId={}, subjectName={}, subjectCode={}, status={}",
+ expenseAccountDO.getTopOrganizationId(),
+ expenseAccountDO.getSubjectName(),
+ expenseAccountDO.getSubjectCode(),
+ expenseAccountDO.getStatus());
+ List result = expenseAccountMapper.queryList(expenseAccountDO);
+ log.info("ExpenseAccountImpl.queryList 查询结果:{} 条", result != null ? result.size() : 0);
+ return result;
}
@Override
diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/expenseAccount/repository/po/QueryExpenseAccountPO.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/expenseAccount/repository/po/QueryExpenseAccountPO.java
index b7152ebd3..60930e83b 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/expenseAccount/repository/po/QueryExpenseAccountPO.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/expenseAccount/repository/po/QueryExpenseAccountPO.java
@@ -39,5 +39,16 @@ public class QueryExpenseAccountPO {
@Excel(name = "上级科目名称")
private String upperSubject;
+ @ApiModelProperty("一级组织表ID")
+ @Excel(name = "一级组织表ID")
+ private Long topOrganizationId;
+
+ @ApiModelProperty("组织表ID")
+ @Excel(name = "组织表ID")
+ private Long organizationId;
+
+ @ApiModelProperty("组织名称")
+ @Excel(name = "组织名称")
+ private String organizationName;
}
diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/expenseAccount/repository/todo/SearchExpenseAccountDO.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/expenseAccount/repository/todo/SearchExpenseAccountDO.java
index c574e3603..e7b525650 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/expenseAccount/repository/todo/SearchExpenseAccountDO.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/expenseAccount/repository/todo/SearchExpenseAccountDO.java
@@ -25,4 +25,10 @@ public class SearchExpenseAccountDO{
@ApiModelProperty("社会车辆固定显示(1-是,2-否)")
private Integer societyStatus;
+
+ @ApiModelProperty("组织ID")
+ private Long organizationId;
+
+ @ApiModelProperty("上级组织ID")
+ private Long topOrganizationId;
}
diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/serviceItemsManage/repository/facade/IServiceItemsManageService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/serviceItemsManage/repository/facade/IServiceItemsManageService.java
index 1c55a94fe..50635022a 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/serviceItemsManage/repository/facade/IServiceItemsManageService.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/serviceItemsManage/repository/facade/IServiceItemsManageService.java
@@ -22,7 +22,7 @@ public interface IServiceItemsManageService extends IService
/**
* 查询费用类别
*/
- public List getCostType();
+ public List getCostType(ServiceItemsManageDO serviceItemsManageDO);
/**
* 新增服务项管理
*/
diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/serviceItemsManage/repository/mapper/ServiceItemsManageMapper.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/serviceItemsManage/repository/mapper/ServiceItemsManageMapper.java
index a4319f8be..999229a81 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/serviceItemsManage/repository/mapper/ServiceItemsManageMapper.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/serviceItemsManage/repository/mapper/ServiceItemsManageMapper.java
@@ -21,6 +21,6 @@ public interface ServiceItemsManageMapper extends BaseMapper
/**
* 查询费用类别
*/
- public List selectServiceTypes();
+ public List selectServiceTypes(ServiceItemsManageDO serviceItemsManageDO);
}
diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/serviceItemsManage/repository/persistence/ServiceItemsManageImpl.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/serviceItemsManage/repository/persistence/ServiceItemsManageImpl.java
index efa59b85b..1e42bf59e 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/serviceItemsManage/repository/persistence/ServiceItemsManageImpl.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/serviceItemsManage/repository/persistence/ServiceItemsManageImpl.java
@@ -6,6 +6,7 @@ import com.mhd.basic.domain.serviceItemsManage.entity.ServiceItemsManage;
import com.mhd.basic.domain.serviceItemsManage.repository.facade.IServiceItemsManageService;
import com.mhd.basic.domain.serviceItemsManage.repository.po.ServiceItemsManagePO;
import com.mhd.basic.domain.serviceItemsManage.repository.todo.ServiceItemsManageDO;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -19,6 +20,7 @@ import java.util.List;
* @author gen
* @date 2024-06-03
*/
+@Slf4j
@Service
public class ServiceItemsManageImpl extends ServiceImpl implements IServiceItemsManageService{
@Autowired
@@ -30,12 +32,80 @@ public class ServiceItemsManageImpl extends ServiceImpl queryList(ServiceItemsManageDO serviceItemsManageDO)
{
- return serviceItemsManageMapper.queryList(serviceItemsManageDO);
+ // 添加日志,记录查询参数
+ log.info("ServiceItemsManageImpl.queryList 查询参数:topOrganizationId={}, organizationId={}, serviceItemsName={}, serviceItemsCode={}",
+ serviceItemsManageDO.getTopOrganizationId(),
+ serviceItemsManageDO.getOrganizationId(),
+ serviceItemsManageDO.getServiceItemsName(),
+ serviceItemsManageDO.getServiceItemsCode());
+
+ // 构建SQL查询条件说明(用于日志,必须与 MyBatis XML 中的条件保持一致)
+ StringBuilder sqlCondition = new StringBuilder("WHERE del_flag = 1");
+
+ // 组织过滤条件(与 XML 中的 和 对应)
+ if (serviceItemsManageDO.getOrganizationId() != null) {
+ // 如果设置了 organizationId,添加 organization_id 条件
+ sqlCondition.append(" AND organization_id = ").append(serviceItemsManageDO.getOrganizationId());
+ sqlCondition.append(" AND organization_name IS NOT NULL");
+ sqlCondition.append(" AND organization_name != ''");
+ sqlCondition.append(" AND LENGTH(TRIM(organization_name)) > 0");
+ } else if (serviceItemsManageDO.getTopOrganizationId() != null) {
+ // 如果设置了 topOrganizationId 但没有设置 organizationId,添加 top_organization_id 条件
+ sqlCondition.append(" AND top_organization_id = ").append(serviceItemsManageDO.getTopOrganizationId());
+ sqlCondition.append(" AND organization_name IS NOT NULL");
+ sqlCondition.append(" AND organization_name != ''");
+ sqlCondition.append(" AND LENGTH(TRIM(organization_name)) > 0");
+ } else {
+ // 如果 organizationId 和 topOrganizationId 都为 null,不添加组织过滤条件(查询所有组织的数据)
+ sqlCondition.append(" (无组织过滤条件,查询所有组织的数据)");
+ }
+
+ // 其他查询条件
+ if (serviceItemsManageDO.getCreateByName() != null && !serviceItemsManageDO.getCreateByName().isEmpty()) {
+ sqlCondition.append(" AND create_by_name LIKE '%").append(serviceItemsManageDO.getCreateByName()).append("%'");
+ }
+ if (serviceItemsManageDO.getUpdateByName() != null && !serviceItemsManageDO.getUpdateByName().isEmpty()) {
+ sqlCondition.append(" AND update_by_name LIKE '%").append(serviceItemsManageDO.getUpdateByName()).append("%'");
+ }
+ if (serviceItemsManageDO.getOrganizationName() != null && !serviceItemsManageDO.getOrganizationName().isEmpty()) {
+ sqlCondition.append(" AND organization_name LIKE '%").append(serviceItemsManageDO.getOrganizationName()).append("%'");
+ }
+ if (serviceItemsManageDO.getServiceItemsName() != null && !serviceItemsManageDO.getServiceItemsName().isEmpty()) {
+ sqlCondition.append(" AND service_items_name LIKE '%").append(serviceItemsManageDO.getServiceItemsName()).append("%'");
+ }
+ if (serviceItemsManageDO.getServiceItemsCode() != null && !serviceItemsManageDO.getServiceItemsCode().isEmpty()) {
+ sqlCondition.append(" AND service_items_code = '").append(serviceItemsManageDO.getServiceItemsCode()).append("'");
+ }
+ if (serviceItemsManageDO.getTaxRate() != null) {
+ sqlCondition.append(" AND tax_rate = ").append(serviceItemsManageDO.getTaxRate());
+ }
+ if (serviceItemsManageDO.getRemark() != null && !serviceItemsManageDO.getRemark().isEmpty()) {
+ sqlCondition.append(" AND remark LIKE '%").append(serviceItemsManageDO.getRemark()).append("%'");
+ }
+
+ log.info("ServiceItemsManageImpl.queryList 生成的SQL条件(预估):SELECT * FROM service_items_manage {}", sqlCondition.toString());
+ log.info("ServiceItemsManageImpl.queryList 实际执行的SQL请查看 MyBatis 日志,参数:organizationId={}, topOrganizationId={}, delFlag={}",
+ serviceItemsManageDO.getOrganizationId(), serviceItemsManageDO.getTopOrganizationId(), serviceItemsManageDO.getDelFlag());
+
+ List result = serviceItemsManageMapper.queryList(serviceItemsManageDO);
+ log.info("ServiceItemsManageImpl.queryList 查询结果:{} 条", result != null ? result.size() : 0);
+ // 记录查询结果中的组织ID分布
+ if (result != null && !result.isEmpty()) {
+ StringBuilder orgIds = new StringBuilder();
+ for (ServiceItemsManagePO po : result) {
+ if (orgIds.length() > 0) {
+ orgIds.append(", ");
+ }
+ orgIds.append(po.getOrganizationId());
+ }
+ log.info("查询结果中的组织ID分布:{}", orgIds.toString());
+ }
+ return result;
}
@Override
- public List getCostType() {
- return serviceItemsManageMapper.selectServiceTypes();
+ public List getCostType(ServiceItemsManageDO serviceItemsManageDO) {
+ return serviceItemsManageMapper.selectServiceTypes(serviceItemsManageDO);
}
/**
* 新增服务项管理
diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/serviceItemsManage/service/ServiceItemsManageDomainService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/serviceItemsManage/service/ServiceItemsManageDomainService.java
index 8069a127b..4b58817a8 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/serviceItemsManage/service/ServiceItemsManageDomainService.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/serviceItemsManage/service/ServiceItemsManageDomainService.java
@@ -37,7 +37,7 @@ public class ServiceItemsManageDomainService {
* 查询费用类型
*/
public List getCostsType(ServiceItemsManageDO serviceItemsManageDO){
- return serviceItemsManageService.getCostType();
+ return serviceItemsManageService.getCostType(serviceItemsManageDO);
}
diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/assember/expenseAccount/ExpenseAccountAssembler.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/assember/expenseAccount/ExpenseAccountAssembler.java
index dde0cfd41..830767dbe 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/assember/expenseAccount/ExpenseAccountAssembler.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/assember/expenseAccount/ExpenseAccountAssembler.java
@@ -27,8 +27,10 @@ public class ExpenseAccountAssembler {
*/
public ExpenseAccountDO toDO(ExpenseAccountDTO expenseAccountDTO) {
ExpenseAccountDO expenseAccountDO = new ExpenseAccountDO();
- // 拷贝
- BeanUtils.copyProperties(expenseAccountDTO, expenseAccountDO, IgnoreNullUtil.getNullPropertyNames(expenseAccountDTO));
+ // 如果 expenseAccountDTO 不为 null,才进行拷贝
+ if (expenseAccountDTO != null) {
+ BeanUtils.copyProperties(expenseAccountDTO, expenseAccountDO, IgnoreNullUtil.getNullPropertyNames(expenseAccountDTO));
+ }
LoginUser loginUser = SecurityUtils.getLoginUser();
if (ObjectUtil.isNull(loginUser)) {
throw new DigitalLogisticsException(UserError.TIMEOUT);
@@ -36,28 +38,45 @@ public class ExpenseAccountAssembler {
String userName = loginUser.getUsername();
// 获取登录人id
Long userId = loginUser.getUserid();
- if(expenseAccountDTO.getExpenseAccountId() != null){
+
+ // 只有在新增或编辑操作时才设置 createByName 和 updateByName
+ // 查询列表时不应该自动设置这些字段,否则会导致 SQL 中添加过滤条件,影响查询结果
+ if(expenseAccountDTO != null && expenseAccountDTO.getExpenseAccountId() != null){
+ // 编辑操作:只设置更新相关字段
if(userId != null){
expenseAccountDO.setUpdateBy(userId);
}else {
expenseAccountDO.setUpdateBy(new Long("0"));
}
- expenseAccountDO.setUpdateByName(userName);
- expenseAccountDO.setUpdateTime(new Date());
-
- }else {
- if(userId != null){
- expenseAccountDO.setCreateBy(userId);
- expenseAccountDO.setUpdateBy(userId);
- }else {
- expenseAccountDO.setCreateBy(new Long("0"));
- expenseAccountDO.setUpdateBy(new Long("0"));
+ // 只有在 DTO 中没有传递 updateByName 时才设置(避免覆盖前端传递的值)
+ if(expenseAccountDO.getUpdateByName() == null || expenseAccountDO.getUpdateByName().isEmpty()){
+ expenseAccountDO.setUpdateByName(userName);
}
- expenseAccountDO.setCreateByName(userName);
- expenseAccountDO.setUpdateByName(userName);
- expenseAccountDO.setCreateTime(new Date());
expenseAccountDO.setUpdateTime(new Date());
- expenseAccountDO.setDelFlag(1);
+ } else if(expenseAccountDTO != null && expenseAccountDTO.getExpenseAccountId() == null) {
+ // expenseAccountId == null,可能是查询操作或新增操作
+ // 如果前端传递了 createByName 或 updateByName,说明是查询条件,不应该设置(已经在 BeanUtils.copyProperties 中拷贝了)
+ // 如果前端没有传递 createByName 和 updateByName,可能是新增操作,需要设置默认值
+ boolean hasQueryCondition = (expenseAccountDTO.getCreateByName() != null && !expenseAccountDTO.getCreateByName().isEmpty())
+ || (expenseAccountDTO.getUpdateByName() != null && !expenseAccountDTO.getUpdateByName().isEmpty());
+
+ if(!hasQueryCondition) {
+ // 没有查询条件,可能是新增操作,设置默认值
+ if(userId != null){
+ expenseAccountDO.setCreateBy(userId);
+ expenseAccountDO.setUpdateBy(userId);
+ }else {
+ expenseAccountDO.setCreateBy(new Long("0"));
+ expenseAccountDO.setUpdateBy(new Long("0"));
+ }
+ expenseAccountDO.setCreateByName(userName);
+ expenseAccountDO.setUpdateByName(userName);
+ expenseAccountDO.setCreateTime(new Date());
+ expenseAccountDO.setUpdateTime(new Date());
+ expenseAccountDO.setDelFlag(1);
+ }
+ // 如果有查询条件(createByName 或 updateByName),说明是查询操作,不应该设置这些字段
+ // 字段值已经在 BeanUtils.copyProperties 中从 DTO 拷贝过来了
}
return expenseAccountDO;
}
diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/assember/serviceItemsManage/ServiceItemsManageAssembler.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/assember/serviceItemsManage/ServiceItemsManageAssembler.java
index eeae9d13c..d3b340d79 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/assember/serviceItemsManage/ServiceItemsManageAssembler.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/assember/serviceItemsManage/ServiceItemsManageAssembler.java
@@ -27,8 +27,10 @@ public class ServiceItemsManageAssembler {
*/
public ServiceItemsManageDO toDO(ServiceItemsManageDTO serviceItemsManageDTO) {
ServiceItemsManageDO serviceItemsManageDO = new ServiceItemsManageDO();
- // 拷贝
- BeanUtils.copyProperties(serviceItemsManageDTO, serviceItemsManageDO, IgnoreNullUtil.getNullPropertyNames(serviceItemsManageDTO));
+ // 如果 serviceItemsManageDTO 不为 null,才进行拷贝
+ if (serviceItemsManageDTO != null) {
+ BeanUtils.copyProperties(serviceItemsManageDTO, serviceItemsManageDO, IgnoreNullUtil.getNullPropertyNames(serviceItemsManageDTO));
+ }
LoginUser loginUser = SecurityUtils.getLoginUser();
if (ObjectUtil.isNull(loginUser)) {
throw new DigitalLogisticsException(UserError.TIMEOUT);
@@ -36,28 +38,49 @@ public class ServiceItemsManageAssembler {
String userName = loginUser.getUsername();
// 获取登录人id
Long userId = loginUser.getUserid();
- if(serviceItemsManageDTO.getServiceItemsManageId() != null){
+
+ // 只有在新增或编辑操作时才设置 createByName 和 updateByName
+ // 查询列表时不应该自动设置这些字段,否则会导致 SQL 中添加过滤条件,影响查询结果
+ // 判断规则:
+ // 1. 如果 serviceItemsManageId != null,说明是编辑操作,只设置更新相关字段
+ // 2. 如果 serviceItemsManageId == null 且前端传递了 createByName 或 updateByName,说明是查询条件,不应该覆盖
+ // 3. 如果 serviceItemsManageId == null 且前端没有传递 createByName 和 updateByName,可能是新增操作,设置默认值
+ if(serviceItemsManageDTO != null && serviceItemsManageDTO.getServiceItemsManageId() != null){
+ // 编辑操作:只设置更新相关字段
if(userId != null){
serviceItemsManageDO.setUpdateBy(userId);
}else {
serviceItemsManageDO.setUpdateBy(new Long("0"));
}
- serviceItemsManageDO.setUpdateByName(userName);
- serviceItemsManageDO.setUpdateTime(new Date());
-
- }else {
- if(userId != null){
- serviceItemsManageDO.setCreateBy(userId);
- serviceItemsManageDO.setUpdateBy(userId);
- }else {
- serviceItemsManageDO.setCreateBy(new Long("0"));
- serviceItemsManageDO.setUpdateBy(new Long("0"));
+ // 只有在 DTO 中没有传递 updateByName 时才设置(避免覆盖前端传递的值)
+ if(serviceItemsManageDO.getUpdateByName() == null || serviceItemsManageDO.getUpdateByName().isEmpty()){
+ serviceItemsManageDO.setUpdateByName(userName);
}
- serviceItemsManageDO.setCreateByName(userName);
- serviceItemsManageDO.setUpdateByName(userName);
- serviceItemsManageDO.setCreateTime(new Date());
serviceItemsManageDO.setUpdateTime(new Date());
- serviceItemsManageDO.setDelFlag(1);
+ } else if(serviceItemsManageDTO != null && serviceItemsManageDTO.getServiceItemsManageId() == null) {
+ // serviceItemsManageId == null,可能是查询操作或新增操作
+ // 如果前端传递了 createByName 或 updateByName,说明是查询条件,不应该设置(已经在 BeanUtils.copyProperties 中拷贝了)
+ // 如果前端没有传递 createByName 和 updateByName,可能是新增操作,需要设置默认值
+ boolean hasQueryCondition = (serviceItemsManageDTO.getCreateByName() != null && !serviceItemsManageDTO.getCreateByName().isEmpty())
+ || (serviceItemsManageDTO.getUpdateByName() != null && !serviceItemsManageDTO.getUpdateByName().isEmpty());
+
+ if(!hasQueryCondition) {
+ // 没有查询条件,可能是新增操作,设置默认值
+ if(userId != null){
+ serviceItemsManageDO.setCreateBy(userId);
+ serviceItemsManageDO.setUpdateBy(userId);
+ }else {
+ serviceItemsManageDO.setCreateBy(new Long("0"));
+ serviceItemsManageDO.setUpdateBy(new Long("0"));
+ }
+ serviceItemsManageDO.setCreateByName(userName);
+ serviceItemsManageDO.setUpdateByName(userName);
+ serviceItemsManageDO.setCreateTime(new Date());
+ serviceItemsManageDO.setUpdateTime(new Date());
+ serviceItemsManageDO.setDelFlag(1);
+ }
+ // 如果有查询条件(createByName 或 updateByName),说明是查询操作,不应该设置这些字段
+ // 字段值已经在 BeanUtils.copyProperties 中从 DTO 拷贝过来了
}
return serviceItemsManageDO;
}
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 304f42d03..fd4930ff3 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
@@ -52,11 +52,29 @@ public class ExpenseAccountApi extends BaseController{
@GetMapping("/list")
public TableDataInfo list(ExpenseAccountDTO expenseAccountDTO)
{
- //转换实体
- ExpenseAccountDO expenseAccountDO = expenseAccountAssembler.toDO(expenseAccountDTO);
- startPage();
- List list = expenseAccountApplicationService.queryList(expenseAccountDO);
- return getDataTable(list);
+ logger.info("收到查询费用科目列表请求,参数:{}", expenseAccountDTO);
+ try {
+ //转换实体,如果 expenseAccountDTO 为 null,创建一个新的对象
+ if (expenseAccountDTO == null) {
+ expenseAccountDTO = new ExpenseAccountDTO();
+ logger.info("expenseAccountDTO 为 null,创建新对象");
+ }
+ ExpenseAccountDO expenseAccountDO = expenseAccountAssembler.toDO(expenseAccountDTO);
+ logger.info("转换后的 ExpenseAccountDO:{}", expenseAccountDO);
+ startPage();
+ logger.info("分页参数已设置");
+ List list = expenseAccountApplicationService.queryList(expenseAccountDO);
+ logger.info("查询完成,返回数据条数:{}", list != null ? list.size() : 0);
+ if (list != null && list.isEmpty()) {
+ logger.warn("查询结果为空,可能的原因:1.数据库中没有符合条件的数据 2.数据权限过滤 3.SQL查询条件问题");
+ logger.warn("查询条件:topOrganizationId={}, del_flag=1", expenseAccountDO.getTopOrganizationId());
+ }
+ return getDataTable(list);
+ } catch (Exception e) {
+ logger.error("查询费用科目列表失败", e);
+ e.printStackTrace();
+ return getDataTable(new ArrayList<>());
+ }
}
@ApiOperation("查询费用科目树型列表")
@@ -84,6 +102,32 @@ public class ExpenseAccountApi extends BaseController{
return AjaxResult.success(expenseAccountApplicationService.selectOtherExpenseAccount(searchExpenseAccountDO));
}
+ /**
+ * 测试查询 - 不设置组织ID,查看是否有数据
+ */
+ @ApiOperation("测试查询费用科目列表(不设置组织ID)")
+ @GetMapping("/testList")
+ public AjaxResult testList(ExpenseAccountDTO expenseAccountDTO)
+ {
+ logger.info("测试查询费用科目列表,不设置组织ID");
+ try {
+ if (expenseAccountDTO == null) {
+ expenseAccountDTO = new ExpenseAccountDTO();
+ }
+ ExpenseAccountDO expenseAccountDO = expenseAccountAssembler.toDO(expenseAccountDTO);
+ // 不设置组织ID,测试是否能查询到数据
+ expenseAccountDO.setTopOrganizationId(null);
+ logger.info("测试查询参数:{}", expenseAccountDO);
+ startPage();
+ List list = expenseAccountApplicationService.queryList(expenseAccountDO);
+ logger.info("测试查询结果:{} 条", list != null ? list.size() : 0);
+ return AjaxResult.success(list);
+ } catch (Exception e) {
+ logger.error("测试查询失败", e);
+ return AjaxResult.error("测试查询失败:" + e.getMessage());
+ }
+ }
+
@ApiOperation("查询费用科目-所有现金明细")
@GetMapping("/selectAllCashExpenseAccount")
public AjaxResult selectAllCashExpenseAccount(){
diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/system/service/impl/SysDictDataServiceImpl.java b/mhd-modules/mhd-system/src/main/java/com/mhd/system/service/impl/SysDictDataServiceImpl.java
index afef1de81..f10053b47 100644
--- a/mhd-modules/mhd-system/src/main/java/com/mhd/system/service/impl/SysDictDataServiceImpl.java
+++ b/mhd-modules/mhd-system/src/main/java/com/mhd/system/service/impl/SysDictDataServiceImpl.java
@@ -85,12 +85,25 @@ public class SysDictDataServiceImpl extends ServiceImpl
- order by account_type,service_items_code,upper_subject_code,show_seq
+ order by a.account_type,service_items_code,upper_subject_code,show_seq
-
diff --git a/mhd-modules/mhd-system/src/main/resources/mapper/basic/addressBook/UserConfigSwitchInterface.xml b/mhd-modules/mhd-system/src/main/resources/mapper/basic/addressBook/UserConfigSwitchInterface.xml
index efc19305a..7950e6039 100644
--- a/mhd-modules/mhd-system/src/main/resources/mapper/basic/addressBook/UserConfigSwitchInterface.xml
+++ b/mhd-modules/mhd-system/src/main/resources/mapper/basic/addressBook/UserConfigSwitchInterface.xml
@@ -9,6 +9,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
a.*
from
common_route a
+
+ LEFT JOIN "USER" u ON a.user_id = u.user_id AND u.del_flag = 0
+
WHERE
a.del_flag = 1
@@ -26,6 +29,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and (a.mail_name like concat('%', #{commonRouteDo.synthesize}, '%') OR a.mail_phone LIKE concat('%', #{commonRouteDo.synthesize}, '%') OR a.mail_address_plot LIKE concat('%', #{commonRouteDo.synthesize}, '%')
OR a.addressee_name like concat('%', #{commonRouteDo.synthesize}, '%') OR a.addressee_phone LIKE concat('%', #{commonRouteDo.synthesize}, '%') OR a.addressee_address_plot LIKE concat('%', #{commonRouteDo.synthesize}, '%'))
+
+
+ and u.organization_id = #{commonRouteDo.organizationId}
+
and a.organization_id = #{organizationId}
+ and a.organization_name IS NOT NULL
+
+
+ and a.top_organization_id = #{topOrganizationId}
+
+ and a.organization_name IS NOT NULL
+
+
+
+ and a.organization_name like concat('%' , #{organizationName} , '%')
and a.organization_id in
diff --git a/mhd-user-center/src/main/resources/mapper/UserDriverMapper.xml b/mhd-user-center/src/main/resources/mapper/UserDriverMapper.xml
index cc2089b4c..513aba1f6 100644
--- a/mhd-user-center/src/main/resources/mapper/UserDriverMapper.xml
+++ b/mhd-user-center/src/main/resources/mapper/UserDriverMapper.xml
@@ -703,7 +703,10 @@
- and b.organization_id = #{userDriverDO.organizationId}
+
+ and b.organization_id = #{userDriverDO.organizationId}
+ and b.organization_name IS NOT NULL
+
and (b.create_by = #{userDriverDO.createBy}
or b.user_id = #{userDriverDO.createBy}
diff --git a/mhd-user-center/src/main/resources/mapper/UserMapper.xml b/mhd-user-center/src/main/resources/mapper/UserMapper.xml
index b5f65eb23..0d9dddf73 100644
--- a/mhd-user-center/src/main/resources/mapper/UserMapper.xml
+++ b/mhd-user-center/src/main/resources/mapper/UserMapper.xml
@@ -217,11 +217,19 @@
and a.user_id = #{userId}
-
+
+
+
and a.organization_id = #{organizationId}
+ and a.organization_name IS NOT NULL
-
+
+
and a.top_organization_id = #{topOrganizationId}
+
+
+ and a.organization_name IS NOT NULL
+
/*组织名称*/
@@ -708,7 +716,7 @@
- SELECT u.user_id, u.user_name, u.user_area_address, u.user_area_county_id, u.user_area_name ,u.user_phone,u.has_default_address,b.shipper_id,b.shipper_enterprise_name,u.DOCUMENT_PREPARER_NC_CODE,b.CUSTOMER_NC_CODE
+ SELECT u.user_id, u.user_name, u.user_area_address, u.user_area_county_id, u.user_area_name ,u.user_phone,u.has_default_address,b.shipper_id,b.shipper_enterprise_name,u.DOCUMENT_PREPARER_NC_CODE,b.CUSTOMER_NC_CODE,u.organization_id AS organizationId,u.top_organization_id AS topOrganizationId
FROM "USER" u
LEFT JOIN user_shipper b ON u.user_id = b.user_id
left join (select user_id, LISTAGG(r.role_name, '&') WITHIN GROUP(ORDER BY r.role_name) AS roleName
@@ -723,9 +731,10 @@
AND u.user_Id = #{userId}
- /*一级组织ID*/
-
- AND u.top_organization_id = #{topOrganizationId}
+ /*组织ID - 数据隔离:南光组织(organizationId=2827)查询全部,其他组织查询自己组织的数据*/
+
+ AND u.organization_id = #{organizationId}
+ AND u.organization_name IS NOT NULL
GROUP BY u.user_id
diff --git a/mhd-user-center/src/main/resources/mapper/UserShipperMapper.xml b/mhd-user-center/src/main/resources/mapper/UserShipperMapper.xml
index c89277bb2..4dbda5373 100644
--- a/mhd-user-center/src/main/resources/mapper/UserShipperMapper.xml
+++ b/mhd-user-center/src/main/resources/mapper/UserShipperMapper.xml
@@ -114,7 +114,8 @@
b.shipper_enterprisel_auth_id,
a.user_phone,
a.user_name,
- a.organization_name,
+ a.organization_id AS organizationId,
+ a.organization_name AS organizationName,
a.user_account,
a.user_member_code,
a.user_idcard_number,
diff --git a/mhd_finance/src/main/java/com/linke/finance/application/server/businessDocument/BusinessDocumentApplicationService.java b/mhd_finance/src/main/java/com/linke/finance/application/server/businessDocument/BusinessDocumentApplicationService.java
index 68554b7bb..495c6d738 100644
--- a/mhd_finance/src/main/java/com/linke/finance/application/server/businessDocument/BusinessDocumentApplicationService.java
+++ b/mhd_finance/src/main/java/com/linke/finance/application/server/businessDocument/BusinessDocumentApplicationService.java
@@ -124,11 +124,51 @@ public class BusinessDocumentApplicationService {
public List queryList(BusinessDocumentDO businessDocumentDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser == null || loginUser.getUserPo() == null) {
+ log.warn("运单管理查询 - 未获取到登录用户信息,跳过数据权限过滤");
+ return businessDocumentDomainService.queryList(businessDocumentDO);
+ }
+
UserPo userPo = loginUser.getUserPo();
- if (userPo.getUserAccountType() == 3){
- businessDocumentDO.setTopOrganizationId(userPo.getTopOrganizationId());
- }else {
- businessDocumentDO.setOrganizationId(userPo.getOrganizationId());
+ Long loginUserOrganizationId = userPo.getOrganizationId();
+ Long topOrganizationId = userPo.getTopOrganizationId();
+
+ // 先保存前端传递的 organizationId(如果存在)
+ Long frontendOrganizationId = businessDocumentDO.getOrganizationId();
+
+ // 数据权限:根据organizationId来设置查询权限
+ // organizationId等于2827时查询全部,其他仅查询各自组织的信息
+ if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
+ // 南光组织(organizationId=2827):可以查询所有组织的数据
+ // 如果前端传递了 organizationId,使用前端传递的值进行过滤
+ // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
+ if (frontendOrganizationId != null) {
+ businessDocumentDO.setOrganizationId(frontendOrganizationId);
+ businessDocumentDO.setTopOrganizationId(null);
+ } else {
+ businessDocumentDO.setOrganizationId(null);
+ businessDocumentDO.setTopOrganizationId(null);
+ }
+ } else {
+ // 其他组织:根据userAccountType设置组织过滤
+ if (userPo.getUserAccountType() == 3){
+ // 租户管理员:使用topOrganizationId
+ if (topOrganizationId != null) {
+ businessDocumentDO.setTopOrganizationId(topOrganizationId);
+ }
+ businessDocumentDO.setOrganizationId(null);
+ } else {
+ // 其他用户:使用organizationId
+ if (frontendOrganizationId != null && !frontendOrganizationId.equals(loginUserOrganizationId)) {
+ // 前端传递了其他组织的organizationId,强制使用当前登录用户的组织ID,防止越权查询
+ log.warn("运单管理查询 - 前端传递的组织ID {} 与当前登录用户的组织ID {} 不一致,使用当前登录用户的组织ID进行过滤",
+ frontendOrganizationId, loginUserOrganizationId);
+ businessDocumentDO.setOrganizationId(loginUserOrganizationId);
+ } else if (frontendOrganizationId == null) {
+ businessDocumentDO.setOrganizationId(loginUserOrganizationId);
+ }
+ businessDocumentDO.setTopOrganizationId(null);
+ }
}
return businessDocumentDomainService.queryList(businessDocumentDO);
}
@@ -1347,6 +1387,21 @@ public class BusinessDocumentApplicationService {
detail.setUpdateBy(loginUser.getUserid());
detail.setUpdateByName(loginUser.getUsername());
detail.setUpdateTime(now);
+ // 设置审核人的组织ID和组织名称
+ if (loginUser.getUserPo() != null) {
+ Long organizationId = loginUser.getUserPo().getOrganizationId();
+ String organizationName = loginUser.getUserPo().getOrganizationName();
+ Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
+ if (organizationId != null) {
+ detail.setOrganizationId(organizationId);
+ }
+ if (organizationName != null) {
+ detail.setOrganizationName(organizationName);
+ }
+ if (topOrganizationId != null) {
+ detail.setTopOrganizationId(topOrganizationId);
+ }
+ }
businessDocumentDetaliUpdateList.add(detail);
BusinessDocumentDetaliDTO detailDto = new BusinessDocumentDetaliDTO();
@@ -1401,6 +1456,7 @@ public class BusinessDocumentApplicationService {
Verification verification = new Verification();
verification.setOrganizationId(businessDocumentDetaliDTO.getOrganizationId());
verification.setTopOrganizationId(businessDocumentDetaliDTO.getTopOrganizationId());
+ verification.setOrganizationName(businessDocumentDetaliDTO.getOrganizationName());
verification.setVerificationStatus(1);//未支付
verification.setBusinessDocumentDetaliId(businessDocumentDetaliDTO.getBusinessDocumentDetaliId());
verification.setBusinessDocumentDetaliNumber(businessDocumentDetaliDTO.getBusinessDocumentDetaliNumber());
diff --git a/mhd_finance/src/main/java/com/linke/finance/application/server/receivingAccount/ReceivingAccountApplicationService.java b/mhd_finance/src/main/java/com/linke/finance/application/server/receivingAccount/ReceivingAccountApplicationService.java
index 22c451d73..5358d16c7 100644
--- a/mhd_finance/src/main/java/com/linke/finance/application/server/receivingAccount/ReceivingAccountApplicationService.java
+++ b/mhd_finance/src/main/java/com/linke/finance/application/server/receivingAccount/ReceivingAccountApplicationService.java
@@ -56,7 +56,7 @@ public class ReceivingAccountApplicationService {
}
/**
- * 批量新增收款账户(先删除所有,再新增)
+ * 批量新增收款账户(追加式新增,不删除旧数据)
*
* @param receivingAccountDTOList 收款账户DTO列表
* @return 是否成功
@@ -65,9 +65,10 @@ public class ReceivingAccountApplicationService {
public Boolean batchInsert(List receivingAccountDTOList) {
log.info("批量新增收款账户,数量:{}", receivingAccountDTOList.size());
- // 先删除所有现有数据
- int deleteCount = receivingAccountRepository.deleteAll();
- log.info("已删除现有收款账户数量:{}", deleteCount);
+ if (receivingAccountDTOList == null || receivingAccountDTOList.isEmpty()) {
+ log.warn("批量新增收款账户:数据列表为空");
+ return false;
+ }
List receivingAccountList = new ArrayList<>();
Date now = new Date();
diff --git a/mhd_finance/src/main/java/com/linke/finance/application/server/reconciliation/ReconciliationApplicationService.java b/mhd_finance/src/main/java/com/linke/finance/application/server/reconciliation/ReconciliationApplicationService.java
index 3ef7020f6..b7e571fda 100644
--- a/mhd_finance/src/main/java/com/linke/finance/application/server/reconciliation/ReconciliationApplicationService.java
+++ b/mhd_finance/src/main/java/com/linke/finance/application/server/reconciliation/ReconciliationApplicationService.java
@@ -75,17 +75,68 @@ public class ReconciliationApplicationService {
public List queryList(ReconciliationDO reconciliationDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
UserPo userPo = loginUser.getUserPo();
- if (userPo.getUserAccountType() == 3) {
- reconciliationDO.setTopOrganizationId(userPo.getTopOrganizationId());
- } else if (userPo.getUserAccountType() == 2){
- reconciliationDO.setOrganizationId(userPo.getOrganizationId());
+
+ // 先保存前端传递的 organizationId(如果存在)
+ Long frontendOrganizationId = reconciliationDO.getOrganizationId();
+
+ // 获取当前登录用户的组织信息
+ Long loginUserOrganizationId = userPo.getOrganizationId();
+ Long topOrganizationId = userPo.getTopOrganizationId();
+
+ // 数据权限:根据organizationId来设置查询权限
+ // organizationId等于2827时查询全部,其他仅查询各自组织的信息
+ if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
+ // 南光组织(organizationId=2827):可以查询所有组织的数据
+ // 如果前端传递了 organizationId,使用前端传递的值进行过滤(包括2827)
+ // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
+ if (frontendOrganizationId != null) {
+ // 前端传递了 organizationId,使用前端传递的值进行过滤
+ reconciliationDO.setOrganizationId(frontendOrganizationId);
+ reconciliationDO.setTopOrganizationId(null);
+ } else {
+ // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
+ reconciliationDO.setOrganizationId(null);
+ reconciliationDO.setTopOrganizationId(null);
+ }
} else {
- if (loginUser.getRoleList().contains(RoleEnum.SHIPPER.getCode()) || loginUser.getRoleList().contains(RoleEnum.COMPANY.getCode())){
- reconciliationDO.setUserId(userPo.getUserId());
- }else {
- reconciliationDO.setOrganizationId(userPo.getOrganizationId());
+ // 其他组织:设置organizationId,只查询当前组织的数据
+ // 其他组织只能查询自己组织的数据,不能查询其他组织(包括南光)的数据
+ // 如果其他组织尝试查询南光(organizationId=2827)的数据,返回空数据
+ if (frontendOrganizationId != null) {
+ // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致
+ if (frontendOrganizationId.equals(2827L)) {
+ // 其他组织尝试查询南光的数据,设置一个不存在的 organizationId,返回空数据
+ reconciliationDO.setOrganizationId(-1L);
+ reconciliationDO.setTopOrganizationId(null);
+ } else if (!frontendOrganizationId.equals(loginUserOrganizationId)) {
+ // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询
+ reconciliationDO.setOrganizationId(loginUserOrganizationId);
+ if (topOrganizationId != null) {
+ reconciliationDO.setTopOrganizationId(topOrganizationId);
+ }
+ } else {
+ // 前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值
+ reconciliationDO.setOrganizationId(frontendOrganizationId);
+ if (topOrganizationId != null) {
+ reconciliationDO.setTopOrganizationId(topOrganizationId);
+ }
+ }
+ } else {
+ // 前端没有传递 organizationId,根据用户账号类型设置组织过滤条件
+ if (userPo.getUserAccountType() == 3) {
+ reconciliationDO.setTopOrganizationId(topOrganizationId);
+ } else if (userPo.getUserAccountType() == 2){
+ reconciliationDO.setOrganizationId(loginUserOrganizationId);
+ } else {
+ if (loginUser.getRoleList().contains(RoleEnum.SHIPPER.getCode()) || loginUser.getRoleList().contains(RoleEnum.COMPANY.getCode())){
+ reconciliationDO.setUserId(userPo.getUserId());
+ }else {
+ reconciliationDO.setOrganizationId(loginUserOrganizationId);
+ }
+ }
}
}
+
return reconciliationDomainService.queryList(reconciliationDO);
}
diff --git a/mhd_finance/src/main/java/com/linke/finance/application/server/tmsReceipt/TmsReceiptApplicationService.java b/mhd_finance/src/main/java/com/linke/finance/application/server/tmsReceipt/TmsReceiptApplicationService.java
index a76162779..39e7f30ce 100644
--- a/mhd_finance/src/main/java/com/linke/finance/application/server/tmsReceipt/TmsReceiptApplicationService.java
+++ b/mhd_finance/src/main/java/com/linke/finance/application/server/tmsReceipt/TmsReceiptApplicationService.java
@@ -50,13 +50,80 @@ public class TmsReceiptApplicationService {
public List queryList(TmsReceiptDO tmsReceiptDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
- if (loginUser != null){
- Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
- if (topOrganizationId != null && topOrganizationId != 1){
- tmsReceiptDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
+ if (loginUser == null || loginUser.getUserPo() == null) {
+ log.warn("收款单查询 - 未获取到登录用户信息,跳过数据权限过滤");
+ return tmsReceiptDomainService.queryList(tmsReceiptDO);
+ }
+
+ // 先保存前端传递的 organizationId(如果存在)
+ Long frontendOrganizationId = tmsReceiptDO.getOrganizationId();
+
+ // 获取当前登录用户的组织信息
+ Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
+ Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
+
+ log.info("收款单查询 - 开始数据权限处理 - 登录用户组织ID: {}, topOrganizationId: {}, 前端传递组织ID: {}",
+ loginUserOrganizationId, topOrganizationId, frontendOrganizationId);
+
+ // 数据权限:根据organizationId来设置查询权限
+ // organizationId等于2827时查询全部,其他仅查询各自组织的信息
+ if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
+ // 南光组织(organizationId=2827):可以查询所有组织的数据
+ // 如果前端传递了 organizationId,使用前端传递的值进行过滤(包括2827)
+ // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
+ if (frontendOrganizationId != null) {
+ // 前端传递了 organizationId,使用前端传递的值进行过滤
+ tmsReceiptDO.setOrganizationId(frontendOrganizationId);
+ tmsReceiptDO.setTopOrganizationId(null);
+ } else {
+ // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
+ tmsReceiptDO.setOrganizationId(null);
+ tmsReceiptDO.setTopOrganizationId(null);
+ }
+ } else {
+ // 其他组织:设置organizationId,只查询当前组织的数据
+ // 其他组织只能查询自己组织的数据,不能查询其他组织(包括南光)的数据
+ // 如果其他组织尝试查询南光(organizationId=2827)的数据,返回空数据
+ if (frontendOrganizationId != null) {
+ // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致
+ if (frontendOrganizationId.equals(2827L)) {
+ // 其他组织尝试查询南光的数据,设置一个不存在的 organizationId,返回空数据
+ tmsReceiptDO.setOrganizationId(-1L);
+ tmsReceiptDO.setTopOrganizationId(null);
+ } else if (!frontendOrganizationId.equals(loginUserOrganizationId)) {
+ // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询
+ tmsReceiptDO.setOrganizationId(loginUserOrganizationId);
+ if (topOrganizationId != null && topOrganizationId != 1) {
+ tmsReceiptDO.setTopOrganizationId(topOrganizationId);
+ }
+ } else {
+ // 前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值
+ tmsReceiptDO.setOrganizationId(frontendOrganizationId);
+ if (topOrganizationId != null && topOrganizationId != 1) {
+ tmsReceiptDO.setTopOrganizationId(topOrganizationId);
+ }
+ }
+ } else {
+ // 前端没有传递 organizationId,根据用户组织信息设置过滤条件
+ // 优先使用 topOrganizationId(如果存在且不等于1),否则使用 organizationId
+ if (topOrganizationId != null && topOrganizationId != 1) {
+ tmsReceiptDO.setTopOrganizationId(topOrganizationId);
+ tmsReceiptDO.setOrganizationId(null);
+ } else if (loginUserOrganizationId != null) {
+ tmsReceiptDO.setOrganizationId(loginUserOrganizationId);
+ tmsReceiptDO.setTopOrganizationId(null);
+ }
}
}
- return tmsReceiptDomainService.queryList(tmsReceiptDO);
+
+ // 调试日志:打印设置的查询条件
+ log.info("收款单查询 - 数据权限处理完成 - 登录用户组织ID: {}, 前端传递组织ID: {}, 最终查询条件 - organizationId: {}, topOrganizationId: {}, 是否为南光组织: {}",
+ loginUserOrganizationId, frontendOrganizationId, tmsReceiptDO.getOrganizationId(), tmsReceiptDO.getTopOrganizationId(),
+ (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)));
+
+ List result = tmsReceiptDomainService.queryList(tmsReceiptDO);
+ log.info("收款单查询 - 查询完成,返回数据条数: {}", result != null ? result.size() : 0);
+ return result;
}
diff --git a/mhd_finance/src/main/java/com/linke/finance/application/service/invoice/InvoiceInfoManageApplicationService.java b/mhd_finance/src/main/java/com/linke/finance/application/service/invoice/InvoiceInfoManageApplicationService.java
index 5124fe772..a39d5bbb3 100644
--- a/mhd_finance/src/main/java/com/linke/finance/application/service/invoice/InvoiceInfoManageApplicationService.java
+++ b/mhd_finance/src/main/java/com/linke/finance/application/service/invoice/InvoiceInfoManageApplicationService.java
@@ -351,6 +351,12 @@ public class InvoiceInfoManageApplicationService {
//数据装配
InvoiceInfo invoiceInfo = new InvoiceAssembler().toDo(invoiceInfoDto);
+ // 设置当前登录用户的组织信息
+ com.mhd.system.api.model.LoginUser loginUser = com.mhd.common.security.utils.SecurityUtils.getLoginUser();
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ invoiceInfo.setOrganizationId(loginUser.getUserPo().getOrganizationId());
+ invoiceInfo.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
+ }
invoiceInfo.setInvoiceStatus(1);
invoiceInfo.setInvoiceHeader(invoiceInfoManagePo.getInvoiceHeader());
invoiceInfo.setWaybillAmount(new BigDecimal(invoiceInfoDto.getInvoiceOrderIds().length));
diff --git a/mhd_finance/src/main/java/com/linke/finance/application/service/revenueExpensesRecord/RevenueExpensesRecordApplicationService.java b/mhd_finance/src/main/java/com/linke/finance/application/service/revenueExpensesRecord/RevenueExpensesRecordApplicationService.java
index f77fe8d4f..a8a1f6145 100644
--- a/mhd_finance/src/main/java/com/linke/finance/application/service/revenueExpensesRecord/RevenueExpensesRecordApplicationService.java
+++ b/mhd_finance/src/main/java/com/linke/finance/application/service/revenueExpensesRecord/RevenueExpensesRecordApplicationService.java
@@ -137,6 +137,12 @@ public class RevenueExpensesRecordApplicationService
throw new DigitalLogisticsException(UserError.TIMEOUT);
}
+ // 设置当前登录用户的组织信息
+ if (loginUser.getUserPo() != null) {
+ revenueExpensesRecord.setOrganizationId(loginUser.getUserPo().getOrganizationId());
+ revenueExpensesRecord.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
+ }
+
//支付通道
if(StringUtils.isNotEmpty(revenueExpensesRecord.getPayChannel())){
List timeTagEndVos = selectListByDictType(DictCode.pay_channel.getCode());
diff --git a/mhd_finance/src/main/java/com/linke/finance/application/service/verification/VerificationApplicationService.java b/mhd_finance/src/main/java/com/linke/finance/application/service/verification/VerificationApplicationService.java
index 685239159..84c455f38 100644
--- a/mhd_finance/src/main/java/com/linke/finance/application/service/verification/VerificationApplicationService.java
+++ b/mhd_finance/src/main/java/com/linke/finance/application/service/verification/VerificationApplicationService.java
@@ -151,44 +151,58 @@ public class VerificationApplicationService
* @return 收入核销集合
*/
public List selectVerificationList(VerificationPo verificationPo){
- List list = new ArrayList<>();
- List organizationIdList = new ArrayList<>();
//获取登录人信息
LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser == null || loginUser.getUserPo() == null) {
+ log.warn("应付账单查询 - 未获取到登录用户信息,跳过数据权限过滤");
+ return verificationDomainService.selectVerificationList(verificationPo);
+ }
+
UserPo userPo = loginUser.getUserPo();
- //当前组织id
- Long organizationId = new Long("2");
- OrganizationPo organizationPo = loginUser.getOrganizationPo();
- if (organizationPo == null){
- organizationIdList.add(userPo.getOrganizationId());
- }else {
- List organizationIdList1 = organizationPo.getOrganizationIdList();
- if (organizationIdList1 != null && organizationIdList1.size() > 0){
- organizationIdList.addAll(organizationIdList1);
- }else {
- organizationIdList.add(organizationPo.getOrganizationId());
+
+ // 先保存前端传递的 organizationId(如果存在)
+ Long frontendOrganizationId = verificationPo.getOrganizationId();
+
+ // 获取当前登录用户的组织信息
+ Long loginUserOrganizationId = userPo.getOrganizationId();
+ Long topOrganizationId = userPo.getTopOrganizationId();
+
+ // 数据权限:根据organizationId来设置查询权限
+ // topOrganizationId为null时,为顶级组织(南光组织),查所有;其他组织查自己
+ if (topOrganizationId == null) {
+ // 南光组织:可以查询所有组织的数据
+ // 如果前端传递了 organizationId,使用前端传递的值进行过滤
+ // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
+ if (frontendOrganizationId != null) {
+ // 前端传递了 organizationId,使用前端传递的值进行过滤
+ verificationPo.setOrganizationId(frontendOrganizationId);
+ verificationPo.setTopOrganizationId(null);
+ } else {
+ // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
+ verificationPo.setOrganizationId(null);
+ verificationPo.setTopOrganizationId(null);
+ }
+ } else {
+ // 其他组织:设置organizationId,只查询当前组织的数据
+ // 其他组织只能查询自己组织的数据
+ if (frontendOrganizationId != null) {
+ // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致
+ if (!frontendOrganizationId.equals(loginUserOrganizationId)) {
+ // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询
+ verificationPo.setOrganizationId(loginUserOrganizationId);
+ } else {
+ // 前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值
+ verificationPo.setOrganizationId(frontendOrganizationId);
+ }
+ verificationPo.setTopOrganizationId(topOrganizationId);
+ } else {
+ // 前端没有传递 organizationId,使用当前登录用户的组织ID
+ verificationPo.setOrganizationId(loginUserOrganizationId);
+ verificationPo.setTopOrganizationId(topOrganizationId);
}
}
- if(loginUser != null){
-// if(loginUser.getUserPo() != null && loginUser.getUserPo().getOrganizationId() != null){
-// organizationId = loginUser.getUserPo().getOrganizationId();
-// AjaxResult info = specialLogisticsServiceFeign.getBranchByOrganizationId(organizationId);
-// if("200".equals(String.valueOf(info.get("code")))){
-// BranchPo branchPo = JSONObject.parseObject(JSONObject.toJSONString(info.get("data")), BranchPo.class);
-// verificationPo.setBranchId(branchPo.getBranchId());
-// }
-// }
- }
- if (organizationIdList != null && organizationIdList.size() > 0){
- organizationIdList.add(userPo.getOrganizationId());
- }
-// verificationPo.setOrganizationIdList(organizationIdList);
-// verificationPo.setVerificationType(2);
-// if (StringUtils.isNotBlank(verificationPo.getWaybillNumbers())){
-// verificationPo.setWaybillNumberList(CollectionUtil.toList(verificationPo.getWaybillNumbers().split(",")));
-// }
+
return verificationDomainService.selectOutVerificationList(verificationPo);
-// return verificationDomainService.selectVerificationList(verificationPo);
}
/**
diff --git a/mhd_finance/src/main/java/com/linke/finance/domain/invoice/service/InvoiceOrderDomainService.java b/mhd_finance/src/main/java/com/linke/finance/domain/invoice/service/InvoiceOrderDomainService.java
index 28243b495..975fd1043 100644
--- a/mhd_finance/src/main/java/com/linke/finance/domain/invoice/service/InvoiceOrderDomainService.java
+++ b/mhd_finance/src/main/java/com/linke/finance/domain/invoice/service/InvoiceOrderDomainService.java
@@ -58,6 +58,11 @@ public class InvoiceOrderDomainService
*/
public int insertInvoiceOrder(InvoiceOrder invoiceOrder)
{
+ // 设置当前登录用户的组织信息
+ com.mhd.system.api.model.LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ invoiceOrder.setOrganizationId(loginUser.getUserPo().getOrganizationId());
+ }
invoiceOrder.setCreateTime(new Date());
invoiceOrder.setCreateBy(SecurityUtils.getUserId());
invoiceOrder.setCreateByName(SecurityUtils.getUsername());
diff --git a/mhd_finance/src/main/java/com/linke/finance/domain/receivingAccount/repository/mapper/ReceivingAccountMapper.java b/mhd_finance/src/main/java/com/linke/finance/domain/receivingAccount/repository/mapper/ReceivingAccountMapper.java
index 1a7da5ec7..b9afb1a2b 100644
--- a/mhd_finance/src/main/java/com/linke/finance/domain/receivingAccount/repository/mapper/ReceivingAccountMapper.java
+++ b/mhd_finance/src/main/java/com/linke/finance/domain/receivingAccount/repository/mapper/ReceivingAccountMapper.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.linke.finance.domain.receivingAccount.entity.ReceivingAccount;
import com.linke.finance.domain.receivingAccount.repository.po.ReceivingAccountPO;
import com.linke.finance.domain.receivingAccount.repository.todo.ReceivingAccountDO;
+import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -46,6 +47,15 @@ public interface ReceivingAccountMapper extends BaseMapper {
*/
int deleteAll();
+ /**
+ * 根据组织ID删除收款账户(删除当前组织的所有收款账户)
+ *
+ * @param topOrganizationId 一级组织ID
+ * @param organizationId 组织ID
+ * @return 影响行数
+ */
+ int deleteByOrganization(@Param("topOrganizationId") String topOrganizationId, @Param("organizationId") String organizationId);
+
/**
* 根据ID删除收款账户
*
diff --git a/mhd_finance/src/main/java/com/linke/finance/domain/receivingAccount/repository/persistence/ReceivingAccountRepository.java b/mhd_finance/src/main/java/com/linke/finance/domain/receivingAccount/repository/persistence/ReceivingAccountRepository.java
index f917e9624..dbe02c426 100644
--- a/mhd_finance/src/main/java/com/linke/finance/domain/receivingAccount/repository/persistence/ReceivingAccountRepository.java
+++ b/mhd_finance/src/main/java/com/linke/finance/domain/receivingAccount/repository/persistence/ReceivingAccountRepository.java
@@ -60,6 +60,17 @@ public class ReceivingAccountRepository {
return receivingAccountMapper.deleteAll();
}
+ /**
+ * 根据组织ID删除收款账户(删除当前组织的所有收款账户)
+ *
+ * @param topOrganizationId 一级组织ID
+ * @param organizationId 组织ID
+ * @return 影响行数
+ */
+ public int deleteByOrganization(String topOrganizationId, String organizationId) {
+ return receivingAccountMapper.deleteByOrganization(topOrganizationId, organizationId);
+ }
+
/**
* 根据ID删除收款账户
*
diff --git a/mhd_finance/src/main/java/com/linke/finance/interfaces/dto/TmsReceiptDTO.java b/mhd_finance/src/main/java/com/linke/finance/interfaces/dto/TmsReceiptDTO.java
index 1289619b9..7e047ebbd 100644
--- a/mhd_finance/src/main/java/com/linke/finance/interfaces/dto/TmsReceiptDTO.java
+++ b/mhd_finance/src/main/java/com/linke/finance/interfaces/dto/TmsReceiptDTO.java
@@ -28,7 +28,7 @@ public class TmsReceiptDTO extends BaseVOEntity{
@ApiModelProperty("一级组织ID")
@Excel(name = "一级组织ID")
- private Integer topOrganizationId;
+ private Long topOrganizationId;
@ApiModelProperty("收款单号")
@Excel(name = "收款单号")
@@ -107,22 +107,19 @@ public class TmsReceiptDTO extends BaseVOEntity{
@Excel(name = "是否删除", readConverterExp = "删除标记:0-无状态,1-正常,2-已删除")
private Integer delFlag;
+ @ApiModelProperty(name = "组织ID集合")
+ private List organizationIdList;
-// @ApiModelProperty(name = "组织ID集合")
-// @Excel(name = "组织ID集合")
-// private List organizationIdList;
-//
-// @ApiModelProperty(name = "权限菜单ID")
-// @Excel(name = "权限菜单ID")
-// private Long permissionMenuId;
-//
-// @ApiModelProperty("组织表id")
-// @Excel(name = "组织表id")
-// private Long organizationId;
-//
-// @ApiModelProperty("组织名称")
-// @Excel(name = "组织名称")
-// private String organizationName;
+ @ApiModelProperty(name = "权限菜单ID")
+ private Long permissionMenuId;
+
+ @ApiModelProperty("组织表id")
+ @Excel(name = "组织表id")
+ private Long organizationId;
+
+ @ApiModelProperty("组织名称")
+ @Excel(name = "组织名称")
+ private String organizationName;
@ApiModelProperty("挂账原因")
@Excel(name = "挂账原因")
diff --git a/mhd_finance/src/main/java/com/linke/finance/interfaces/facade/businessDocument/BusinessDocumentApi.java b/mhd_finance/src/main/java/com/linke/finance/interfaces/facade/businessDocument/BusinessDocumentApi.java
index 62ac09c87..080158daf 100644
--- a/mhd_finance/src/main/java/com/linke/finance/interfaces/facade/businessDocument/BusinessDocumentApi.java
+++ b/mhd_finance/src/main/java/com/linke/finance/interfaces/facade/businessDocument/BusinessDocumentApi.java
@@ -15,6 +15,8 @@ import com.linke.finance.domain.reconciliation.repository.po.FinacialReconciliat
import com.linke.finance.infrastructure.util.UniqueKeyUtil;
import com.linke.finance.interfaces.dto.InvoiceOrderDto;
import com.mhd.common.core.domain.dto.BusinessDocumentDetaliDTO;
+import com.mhd.common.security.utils.SecurityUtils;
+import com.mhd.system.api.model.LoginUser;
import com.mhd.common.core.domain.dto.EditPaymentMethodDTO;
import com.mhd.common.log.annotation.Log;
import com.mhd.common.log.enums.BusinessType;
diff --git a/mhd_finance/src/main/java/com/linke/finance/interfaces/facadeApp/tmsReceipt/TmsReceiptApi.java b/mhd_finance/src/main/java/com/linke/finance/interfaces/facadeApp/tmsReceipt/TmsReceiptApi.java
index b4b9e7aa4..bdeece62f 100644
--- a/mhd_finance/src/main/java/com/linke/finance/interfaces/facadeApp/tmsReceipt/TmsReceiptApi.java
+++ b/mhd_finance/src/main/java/com/linke/finance/interfaces/facadeApp/tmsReceipt/TmsReceiptApi.java
@@ -16,6 +16,8 @@ import com.mhd.common.core.utils.IgnoreNullUtil;
import com.mhd.common.core.utils.bean.BeanUtils;
import com.mhd.common.log.annotation.Log;
import com.mhd.common.log.enums.BusinessType;
+import com.mhd.common.security.utils.SecurityUtils;
+import com.mhd.system.api.model.LoginUser;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -56,6 +58,39 @@ public class TmsReceiptApi extends BaseController{
// TmsReceiptDO tmsReceiptDO = tmsReceiptAssembler.toDO(tmsReceiptDTO);
TmsReceiptDO tmsReceiptDO = new TmsReceiptDO();
BeanUtils.copyProperties(tmsReceiptDTO, tmsReceiptDO);
+ // 获取当前登录用户的组织信息,用于SQL中的数据隔离
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ Long loginOrgId = loginUser.getUserPo().getOrganizationId();
+ // 保存前端传入的组织查询条件(如果有)
+ Long frontendOrgId = tmsReceiptDO.getOrganizationId();
+ Long frontendTopOrgId = tmsReceiptDO.getTopOrganizationId();
+
+ // 如果当前登录用户的organizationId为2827(南光组织),可查询全部组织数据;其他组织只能查询自己组织的数据
+ if (loginOrgId == null || !loginOrgId.equals(2827L)) {
+ // 其他组织:只能查询自己组织的数据,忽略前端传入的组织查询条件
+ Long topOrgId = loginUser.getUserPo().getTopOrganizationId();
+ Long orgId = loginUser.getUserPo().getOrganizationId();
+ // 强制使用当前登录用户的组织信息,确保只能查询自己组织的数据
+ if (topOrgId != null) {
+ tmsReceiptDO.setTopOrganizationId(topOrgId);
+ }
+ if (orgId != null) {
+ tmsReceiptDO.setOrganizationId(orgId);
+ }
+ // 注意:organizationName 条件仍然可以使用,但会被 organizationId 条件限制,只能查询自己组织的
+ } else {
+ // 南光组织(organizationId = 2827):可以查询全部组织数据
+ // 如果前端传入了组织查询条件(organizationId、topOrganizationId或organizationName),则使用前端条件
+ // 如果前端没有传入任何组织查询条件,则不设置组织ID过滤,查询全部(但organization_name IS NOT NULL仍会生效)
+ if (frontendOrgId == null && frontendTopOrgId == null && (tmsReceiptDO.getOrganizationName() == null || tmsReceiptDO.getOrganizationName().isEmpty())) {
+ // 前端没有传入任何组织查询条件,清空组织ID过滤,查询全部组织数据
+ tmsReceiptDO.setTopOrganizationId(null);
+ tmsReceiptDO.setOrganizationId(null);
+ }
+ // 如果前端传入了组织查询条件,则保留使用前端条件(organizationId、topOrganizationId或organizationName)
+ }
+ }
startPage();
List list = tmsReceiptApplicationService.queryList(tmsReceiptDO);
return getDataTable(list);
@@ -71,6 +106,22 @@ public class TmsReceiptApi extends BaseController{
//转换实体
ReceivingAccountDO receivingAccountDO = new ReceivingAccountDO();
BeanUtils.copyProperties(receivingAccountDTO, receivingAccountDO);
+ // 获取当前登录用户的组织信息,用于数据隔离
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ Long organizationId = loginUser.getUserPo().getOrganizationId();
+ // 如果当前登录用户的organizationId为2827(南光组织),可查询全部组织数据;其他组织只能查询自己组织的数据
+ if (organizationId == null || !organizationId.equals(2827L)) {
+ Long topOrgId = loginUser.getUserPo().getTopOrganizationId();
+ Long orgId = loginUser.getUserPo().getOrganizationId();
+ if (topOrgId != null) {
+ receivingAccountDO.setTopOrganizationId(String.valueOf(topOrgId));
+ }
+ if (orgId != null) {
+ receivingAccountDO.setOrganizationId(String.valueOf(orgId));
+ }
+ }
+ }
startPage();
List list = receivingAccountApplicationService.queryList(receivingAccountDO);
return getDataTable(list);
@@ -87,6 +138,18 @@ public class TmsReceiptApi extends BaseController{
//转换实体
ReceivingAccountDO receivingAccountDO = new ReceivingAccountDO();
BeanUtils.copyProperties(receivingAccountDTO, receivingAccountDO);
+ // 获取当前登录用户的组织信息
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
+ Long organizationId = loginUser.getUserPo().getOrganizationId();
+ if (topOrganizationId != null) {
+ receivingAccountDO.setTopOrganizationId(String.valueOf(topOrganizationId));
+ }
+ if (organizationId != null) {
+ receivingAccountDO.setOrganizationId(String.valueOf(organizationId));
+ }
+ }
return toAjax(receivingAccountApplicationService.insert(receivingAccountDO));
}
@@ -98,11 +161,28 @@ public class TmsReceiptApi extends BaseController{
@PostMapping("/batchAddAccount")
public AjaxResult batchAddAccount(@RequestBody List receivingAccountDTOList)
{
+ // 获取当前登录用户的组织信息
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ String topOrganizationId = null;
+ String organizationId = null;
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ Long topOrgId = loginUser.getUserPo().getTopOrganizationId();
+ Long orgId = loginUser.getUserPo().getOrganizationId();
+ if (topOrgId != null) {
+ topOrganizationId = String.valueOf(topOrgId);
+ }
+ if (orgId != null) {
+ organizationId = String.valueOf(orgId);
+ }
+ }
//转换实体
List receivingAccountDOList = new ArrayList<>();
for (ReceivingAccountDTO dto : receivingAccountDTOList) {
ReceivingAccountDO receivingAccountDO = new ReceivingAccountDO();
BeanUtils.copyProperties(dto, receivingAccountDO);
+ // 设置当前登录用户的组织信息
+ receivingAccountDO.setTopOrganizationId(topOrganizationId);
+ receivingAccountDO.setOrganizationId(organizationId);
receivingAccountDOList.add(receivingAccountDO);
}
return toAjax(receivingAccountApplicationService.batchInsert(receivingAccountDOList));
diff --git a/mhd_finance/src/main/resources/mapper/receivingAccount/ReceivingAccountMapper.xml b/mhd_finance/src/main/resources/mapper/receivingAccount/ReceivingAccountMapper.xml
index c62228468..4fb61f59f 100644
--- a/mhd_finance/src/main/resources/mapper/receivingAccount/ReceivingAccountMapper.xml
+++ b/mhd_finance/src/main/resources/mapper/receivingAccount/ReceivingAccountMapper.xml
@@ -11,10 +11,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+
+
- select id, account_name, account_information, del_flag, create_time, update_time
+ select id, account_name, account_information, del_flag, create_time, update_time, top_organization_id, organization_id
from receiving_account
@@ -30,6 +32,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and account_information like concat('%', #{accountInformation}, '%')
+
+ and top_organization_id = #{topOrganizationId}
+
+
+ and organization_id = #{organizationId}
+
order by create_time desc
@@ -47,6 +55,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
del_flag,
create_time,
update_time,
+ top_organization_id,
+ organization_id,
#{accountName},
@@ -54,6 +64,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{delFlag},
#{createTime},
#{updateTime},
+ #{topOrganizationId},
+ #{organizationId},
@@ -84,4 +96,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
update_time = now()
where del_flag = 1
+
+
+ update receiving_account
+ set del_flag = 2,
+ update_time = now()
+ where del_flag = 1
+
+ and top_organization_id = #{topOrganizationId}
+
+
+ and organization_id = #{organizationId}
+
+
diff --git a/mhd_finance/src/main/resources/mapper/reconciliation/ReconciliationMapper.xml b/mhd_finance/src/main/resources/mapper/reconciliation/ReconciliationMapper.xml
index 7b05ad841..9061b996e 100644
--- a/mhd_finance/src/main/resources/mapper/reconciliation/ReconciliationMapper.xml
+++ b/mhd_finance/src/main/resources/mapper/reconciliation/ReconciliationMapper.xml
@@ -31,6 +31,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+
@@ -134,12 +135,24 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and a.update_by_name like concat('%', #{updateByName}, '%')
+
and a.organization_id = #{organizationId}
+
and a.top_organization_id = #{topOrganizationId}
+
+
+ and a.organization_name LIKE CONCAT('%',#{organizationName},'%')
+
+
+
+ and a.organization_name IS NOT NULL
+ and a.organization_name <> ''
+ and LENGTH(TRIM(a.organization_name)) > 0
+
AND (date_format(a.collection_time,'%Y-%m-%d') >= date_format(#{collectionTimeStart},'%Y-%m-%d')
and date_format(a.collection_time,'%Y-%m-%d') date_format(#{collectionTimeEnd},'%Y-%m-%d'))
diff --git a/mhd_finance/src/main/resources/mapper/revenueExpensesRecord/RevenueExpensesRecordMapper.xml b/mhd_finance/src/main/resources/mapper/revenueExpensesRecord/RevenueExpensesRecordMapper.xml
index b7bd92abf..f4924a64d 100644
--- a/mhd_finance/src/main/resources/mapper/revenueExpensesRecord/RevenueExpensesRecordMapper.xml
+++ b/mhd_finance/src/main/resources/mapper/revenueExpensesRecord/RevenueExpensesRecordMapper.xml
@@ -45,8 +45,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-
-
@@ -95,8 +93,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
bank_account,
oil_number,
voucher_images,
- pay_channel,
- pay_channel_name,
kingdee,
kingdee_subject_code,
kingdee_subject_name,
diff --git a/mhd_finance/src/main/resources/mapper/tmsReceipt/TmsReceiptMapper.xml b/mhd_finance/src/main/resources/mapper/tmsReceipt/TmsReceiptMapper.xml
index 02e08049e..bde07a1a3 100644
--- a/mhd_finance/src/main/resources/mapper/tmsReceipt/TmsReceiptMapper.xml
+++ b/mhd_finance/src/main/resources/mapper/tmsReceipt/TmsReceiptMapper.xml
@@ -97,6 +97,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and account_information like concat('%', #{accountInformation}, '%')
+
+
+ and organization_name IS NOT NULL
+ and organization_name <> ''
+ and LENGTH(TRIM(organization_name)) > 0
+
+
+ and organization_id = #{organizationId}
+
+
+
+ and top_organization_id = #{topOrganizationId}
+
+
+
+ and organization_name LIKE CONCAT('%',#{organizationName},'%')
order by create_time desc
diff --git a/mhd_finance/src/main/resources/mapper/verification/VerificationMapper.xml b/mhd_finance/src/main/resources/mapper/verification/VerificationMapper.xml
index 62b204034..bc060b66e 100644
--- a/mhd_finance/src/main/resources/mapper/verification/VerificationMapper.xml
+++ b/mhd_finance/src/main/resources/mapper/verification/VerificationMapper.xml
@@ -47,61 +47,62 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+
SELECT
- verification_id,
- verification_status,
- business_document_detali_id,
- business_document_detali_number,
- business_document_id,
- business_document_number,
- business_type,
- inner_number,
- enter_account_time,
- expense_item,
- first_subject,
- first_subject_name,
- second_subject,
- second_subject_name,
- verification_money,
- pay_id,
- pay_person,
- pay_channel,
- pay_channel_name,
- bank_number,
- receipt_number,
- pay_remark,
- account_holder_name,
- account_holder_bank,
- bank_account,
- images,
- audit_remark,
- create_time,
- create_by,
- create_by_name,
- update_time,
- update_by,
- update_by_name,
- del_flag,
- pay_way,
- pay_way_name,
- organization_id,
- top_organization_id,
- receivable_type,
- department_id,
- department_name,
- payee,
- pay_type,
- license_number,
- pay_id,
- pay_name,
- bill_remarks,
- payment_method,
- fuel_card_number
+ v.verification_id,
+ v.verification_status,
+ v.business_document_detali_id,
+ v.business_document_detali_number,
+ v.business_document_id,
+ v.business_document_number,
+ v.business_type,
+ v.inner_number,
+ v.enter_account_time,
+ v.expense_item,
+ v.first_subject,
+ v.first_subject_name,
+ v.second_subject,
+ v.second_subject_name,
+ v.verification_money,
+ v.pay_id,
+ v.pay_person,
+ v.pay_channel,
+ v.pay_channel_name,
+ v.bank_number,
+ v.receipt_number,
+ v.pay_remark,
+ v.account_holder_name,
+ v.account_holder_bank,
+ v.bank_account,
+ v.images,
+ v.audit_remark,
+ v.create_time,
+ v.create_by,
+ v.create_by_name,
+ v.update_time,
+ v.update_by,
+ v.update_by_name,
+ v.del_flag,
+ v.pay_way,
+ v.pay_way_name,
+ v.organization_id,
+ v.top_organization_id,
+ v.receivable_type,
+ v.department_id,
+ v.department_name,
+ v.payee,
+ v.pay_type,
+ v.license_number,
+ v.pay_name,
+ v.bill_remarks,
+ v.payment_method,
+ v.fuel_card_number,
+ v.organization_name
FROM
- verification
+ verification v
@@ -343,9 +344,30 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- and del_flag = 1
+ and v.del_flag = 1
+
+
+
+
+
+
+
+
+ AND v.organization_name IS NOT NULL
+
+
+
+
+ AND v.organization_id = #{organizationId}
+
+
+ AND v.organization_name IS NOT NULL
+
+
+
+
- AND business_document_number in
+ AND v.business_document_number in
#{waybill}
@@ -369,55 +391,55 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- AND date_format(create_time,'%Y-%m-%d') >= #{enterAccountTimeStart}
+ AND date_format(v.create_time,'%Y-%m-%d') >= #{enterAccountTimeStart}
- AND date_format(create_time,'%Y-%m-%d') #{enterAccountTimeEnd}
+ AND date_format(v.create_time,'%Y-%m-%d') #{enterAccountTimeEnd}
- AND date_format(cancel_after_verification_time,'%Y-%m-%d') >= #{cancelAfterVerificationTimeStart}
+ AND date_format(v.cancel_after_verification_time,'%Y-%m-%d') >= #{cancelAfterVerificationTimeStart}
- AND date_format(cancel_after_verification_time,'%Y-%m-%d') #{cancelAfterVerificationTimeEnd}
+ AND date_format(v.cancel_after_verification_time,'%Y-%m-%d') #{cancelAfterVerificationTimeEnd}
- and cancel_after_verification_type = #{cancelAfterVerificationType}
- and mail_branch = #{mailBranch}
- and account_holder_bank = #{accountHolderBank}
- and account_holder_name = #{accountHolderName}
- and bank_account = #{bankAccount}
- and arrive_branch = #{arriveBranch}
- and verification_type = #{verificationType}
- and verification_status = #{verificationStatusOne}
- and verification_status #{verificationStatus}
- and verification_status = #{verificationStatus}
- and inner_number like concat('%', #{innerNumber}, '%')
- and enter_account_time = #{enterAccountTime}
- and first_subject = #{firstSubject}
- and second_subject = #{secondSubject}
- and verification_money = #{verificationMoney}
- and pay_person = #{payPerson}
- and pay_channel = #{payChannel}
- and bank_number = #{bankNumber}
- and receipt_number = #{receiptNumber}
- and collection_remark = #{collectionRemark}
- and waybill_id = #{waybillId}
- and waybill_number like concat('%', #{waybillNumber}, '%')
- and waybill_remark = #{waybillRemark}
- and waybill_source = #{waybillSource}
- and revenue_expenses_number = #{revenueExpensesNumber}
- and enter_account_id = #{enterAccountId}
- and enter_account_name like concat('%', #{enterAccountName}, '%')
- and cancel_after_verification_id = #{cancelAfterVerificationId}
- and cancel_after_verification_name like concat('%', #{cancelAfterVerificationName}, '%')
- and cancel_after_verification_time = #{cancelAfterVerificationTime}
- and create_by_name like concat('%', #{createByName}, '%')
- and update_by_name like concat('%', #{updateByName}, '%')
- and verification_status in (1,2,3,4,5)
- and verification_status = 6
- and in_verification_status = #{inVerificationStatus}
- and uuid_code = #{uuidCode}
+ and v.cancel_after_verification_type = #{cancelAfterVerificationType}
+ and v.mail_branch = #{mailBranch}
+ and v.account_holder_bank = #{accountHolderBank}
+ and v.account_holder_name = #{accountHolderName}
+ and v.bank_account = #{bankAccount}
+ and v.arrive_branch = #{arriveBranch}
+ and v.verification_type = #{verificationType}
+ and v.verification_status = #{verificationStatusOne}
+ and v.verification_status #{verificationStatus}
+ and v.verification_status = #{verificationStatus}
+ and v.inner_number like concat('%', #{innerNumber}, '%')
+ and v.enter_account_time = #{enterAccountTime}
+ and v.first_subject = #{firstSubject}
+ and v.second_subject = #{secondSubject}
+ and v.verification_money = #{verificationMoney}
+ and v.pay_person = #{payPerson}
+ and v.pay_channel = #{payChannel}
+ and v.bank_number = #{bankNumber}
+ and v.receipt_number = #{receiptNumber}
+ and v.collection_remark = #{collectionRemark}
+ and v.waybill_id = #{waybillId}
+ and v.waybill_number like concat('%', #{waybillNumber}, '%')
+ and v.waybill_remark = #{waybillRemark}
+ and v.waybill_source = #{waybillSource}
+ and v.revenue_expenses_number = #{revenueExpensesNumber}
+ and v.enter_account_id = #{enterAccountId}
+ and v.enter_account_name like concat('%', #{enterAccountName}, '%')
+ and v.cancel_after_verification_id = #{cancelAfterVerificationId}
+ and v.cancel_after_verification_name like concat('%', #{cancelAfterVerificationName}, '%')
+ and v.cancel_after_verification_time = #{cancelAfterVerificationTime}
+ and v.create_by_name like concat('%', #{createByName}, '%')
+ and v.update_by_name like concat('%', #{updateByName}, '%')
+ and v.verification_status in (1,2,3,4,5)
+ and v.verification_status = 6
+ and v.in_verification_status = #{inVerificationStatus}
+ and v.uuid_code = #{uuidCode}
- order by create_time desc
+ order by v.create_time desc
@@ -989,12 +1011,33 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
ORDER BY
a.create_time DESC, a.verification_id DESC
-
+
- and del_flag = 1
+ and v.del_flag = 1
+
+
+
+
+
+
+
+
+ AND v.organization_name IS NOT NULL
+
+
+
+
+ AND v.organization_id = #{organizationId}
+
+
+ AND v.organization_name IS NOT NULL
+
+
+
+
- AND business_document_number in
+ AND v.business_document_number in
#{waybill}
@@ -1018,50 +1061,50 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- AND date_format(create_time,'%Y-%m-%d') >= #{enterAccountTimeStart}
+ AND date_format(v.create_time,'%Y-%m-%d') >= #{enterAccountTimeStart}
- AND date_format(create_time,'%Y-%m-%d') #{enterAccountTimeEnd}
+ AND date_format(v.create_time,'%Y-%m-%d') #{enterAccountTimeEnd}
- and payment_method = #{paymentMethod}
+ and v.payment_method = #{paymentMethod}
- AND date_format(cancel_after_verification_time,'%Y-%m-%d') >= #{cancelAfterVerificationTimeStart}
+ AND date_format(v.cancel_after_verification_time,'%Y-%m-%d') >= #{cancelAfterVerificationTimeStart}
- AND date_format(cancel_after_verification_time,'%Y-%m-%d') #{cancelAfterVerificationTimeEnd}
+ AND date_format(v.cancel_after_verification_time,'%Y-%m-%d') #{cancelAfterVerificationTimeEnd}
- and account_holder_bank = #{accountHolderBank}
- and business_document_detali_number like concat('%', #{businessDocumentDetaliNumber}, '%')
- and account_holder_name = #{accountHolderName}
- and bank_account = #{bankAccount}
+ and v.account_holder_bank = #{accountHolderBank}
+ and v.business_document_detali_number like concat('%', #{businessDocumentDetaliNumber}, '%')
+ and v.account_holder_name = #{accountHolderName}
+ and v.bank_account = #{bankAccount}
- and verification_status = #{verificationStatus}
- and business_type = #{businessType}
- and inner_number like concat('%', #{innerNumber}, '%')
- and business_document_number = #{businessDocumentNumber}
- and expense_item = #{expenseItem}
- and enter_account_time = #{enterAccountTime}
- and first_subject = #{firstSubject}
- and second_subject = #{secondSubject}
- and pay_type = #{payType}
- and payee like concat('%', #{payee}, '%')
- and pay_name like concat('%', #{payName}, '%')
- and license_number like concat('%', #{licenseNumber}, '%')
- and department_name like concat('%', #{departmentName}, '%')
- and verification_money = #{verificationMoney}
- and pay_person = #{payPerson}
- and pay_channel = #{payChannel}
- and bank_number = #{bankNumber}
- and receipt_number = #{receiptNumber}
+ and v.verification_status = #{verificationStatus}
+ and v.business_type = #{businessType}
+ and v.inner_number like concat('%', #{innerNumber}, '%')
+ and v.business_document_number = #{businessDocumentNumber}
+ and v.expense_item = #{expenseItem}
+ and v.enter_account_time = #{enterAccountTime}
+ and v.first_subject = #{firstSubject}
+ and v.second_subject = #{secondSubject}
+ and v.pay_type = #{payType}
+ and v.payee like concat('%', #{payee}, '%')
+ and v.pay_name like concat('%', #{payName}, '%')
+ and v.license_number like concat('%', #{licenseNumber}, '%')
+ and v.department_name like concat('%', #{departmentName}, '%')
+ and v.verification_money = #{verificationMoney}
+ and v.pay_person = #{payPerson}
+ and v.pay_channel = #{payChannel}
+ and v.bank_number = #{bankNumber}
+ and v.receipt_number = #{receiptNumber}
@@ -1073,12 +1116,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- and create_by_name like concat('%', #{createByName}, '%')
- and update_by_name like concat('%', #{updateByName}, '%')
+ and v.create_by_name like concat('%', #{createByName}, '%')
+ and v.update_by_name like concat('%', #{updateByName}, '%')
- order by create_time desc
+ order by v.create_time desc
diff --git a/mhd_product/src/main/java/com/linke/product/application/service/menu/MenuApplicationService.java b/mhd_product/src/main/java/com/linke/product/application/service/menu/MenuApplicationService.java
index e48ecd148..bb09378b1 100644
--- a/mhd_product/src/main/java/com/linke/product/application/service/menu/MenuApplicationService.java
+++ b/mhd_product/src/main/java/com/linke/product/application/service/menu/MenuApplicationService.java
@@ -303,8 +303,9 @@ public class MenuApplicationService {
Long tenantsId = organizationPo1.getTenantsId();
OrganizationPo organizationPo = iOrganizationSvc.selectOrganizationById(organizationId);
List menuVos = new ArrayList<>();
- //一级组织
- if(organizationPo.getParentOrganizationId() == 0){
+ //一级组织:organizationState == 1 表示是一级组织,或者 topOrganizationId == null/0
+ if(organizationPo.getOrganizationState() != null && organizationPo.getOrganizationState() == 1
+ || (organizationPo.getTopOrganizationId() == null || organizationPo.getTopOrganizationId() == 0)){
menuVos = menuDomainService.selectMenuIdListByTenantsId(organizationPo.getTenantsId(), 1);
}else {
menuVos = menuDomainService.selectMenuIdListByOrganizationId(organizationId);
diff --git a/mhd_product/src/main/java/com/linke/product/application/service/organization/OrganizationApplicationService.java b/mhd_product/src/main/java/com/linke/product/application/service/organization/OrganizationApplicationService.java
index 674dd75a7..2007dd67e 100644
--- a/mhd_product/src/main/java/com/linke/product/application/service/organization/OrganizationApplicationService.java
+++ b/mhd_product/src/main/java/com/linke/product/application/service/organization/OrganizationApplicationService.java
@@ -100,6 +100,9 @@ public class OrganizationApplicationService {
* @return 组织列表信息
*/
public List selectOrganizationList(OrganizationPo organizationPo, DataPermission dataPermission) {
+ // 添加组织数据权限过滤
+ applyOrganizationDataPermission(organizationPo);
+
if(dataPermission != null){
if(dataPermission.getOrganizationIdList() != null && dataPermission.getOrganizationIdList().size() > 0){
organizationPo.setOrganizationIdList(dataPermission.getOrganizationIdList());
@@ -457,7 +460,7 @@ public class OrganizationApplicationService {
if(parentOrganizationId != null && parentOrganizationId != 0L && CollectionUtil.isNotEmpty(menuIdList)){
//获取父级组织信息(一级组织拥有自己的菜单,非一级组织只拥有菜单权限)
OrganizationPo organizationPo = iOrganizationSvc.selectOrganizationById(parentOrganizationId);
- if(organizationPo.getParentOrganizationId() == 0L){
+ if(organizationPo.getTopOrganizationId() == 0L){
//获取一级组织对应的所有菜单
List allByTenantsId = menuDomainService.getMenuIdByTenantsId(organizationPo.getTenantsId(),null);
if (CollectionUtil.isNotEmpty(allByTenantsId)){
@@ -634,4 +637,51 @@ public class OrganizationApplicationService {
}
return list;
}
+
+ /**
+ * 应用组织数据权限过滤
+ */
+ private void applyOrganizationDataPermission(OrganizationPo organizationPo) {
+ try {
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
+ Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
+
+ // 先保存前端传递的 organizationId(如果存在)
+ Long frontendOrganizationId = organizationPo.getOrganizationId();
+
+ // 数据权限:根据organizationId来设置查询权限
+ // organizationId等于2827时查询全部,其他仅查询各自组织的信息
+ if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
+ // 南光组织(organizationId=2827):可以查询所有组织的数据
+ // 如果前端传递了 organizationId,使用前端传递的值进行过滤
+ // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
+ if (frontendOrganizationId != null) {
+ organizationPo.setOrganizationId(frontendOrganizationId);
+ organizationPo.setTopOrganizationId(null);
+ } else {
+ organizationPo.setOrganizationId(null);
+ organizationPo.setTopOrganizationId(null);
+ }
+ } else {
+ // 其他组织:设置organizationId,只查询当前组织的数据
+ if (frontendOrganizationId != null && !frontendOrganizationId.equals(loginUserOrganizationId)) {
+ // 前端传递了其他组织的organizationId,强制使用当前登录用户的组织ID,防止越权查询
+ log.warn("组织列表查询 - 前端传递的组织ID {} 与当前登录用户的组织ID {} 不一致,使用当前登录用户的组织ID进行过滤",
+ frontendOrganizationId, loginUserOrganizationId);
+ organizationPo.setOrganizationId(loginUserOrganizationId);
+ } else if (frontendOrganizationId == null) {
+ organizationPo.setOrganizationId(loginUserOrganizationId);
+ }
+ if (topOrganizationId != null) {
+ organizationPo.setTopOrganizationId(topOrganizationId);
+ }
+ }
+ }
+ } catch (Exception e) {
+ log.warn("应用组织数据权限过滤失败,将不进行组织过滤: {}", e.getMessage());
+ // 如果获取登录用户信息失败,不添加过滤条件,避免影响正常查询
+ }
+ }
}
diff --git a/mhd_product/src/main/java/com/linke/product/domain/organization/repository/po/OrganizationPo.java b/mhd_product/src/main/java/com/linke/product/domain/organization/repository/po/OrganizationPo.java
index b355aa3e7..749a9f327 100644
--- a/mhd_product/src/main/java/com/linke/product/domain/organization/repository/po/OrganizationPo.java
+++ b/mhd_product/src/main/java/com/linke/product/domain/organization/repository/po/OrganizationPo.java
@@ -21,6 +21,8 @@ public class OrganizationPo extends BaseVOEntity implements Serializable {
private Long organizationId;
@ApiModelProperty(name = "上级组织表ID")
private Long parentOrganizationId;
+ @ApiModelProperty(name = "一级组织表ID")
+ private Long topOrganizationId;
@ApiModelProperty(name = "组织名称")
private String organizationName;
@ApiModelProperty(name = "员工数量")
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 934ed4034..fe9ca5e32 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
@@ -139,6 +139,20 @@ public class VehicleApplicationService {
*/
@NeedSetValueMethod
public List selectVehicleList(VehiclePo vehiclePo, DataPermission dataPermission) {
+ // 获取登录人信息
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser == null || loginUser.getUserPo() == null) {
+ log.warn("车辆列表查询 - 未获取到登录用户信息,跳过数据权限过滤");
+ return vehicleDomainService.selectVehicleList(vehiclePo);
+ }
+
+ UserPo userPo = loginUser.getUserPo();
+ Long loginUserOrganizationId = userPo.getOrganizationId();
+ Long topOrganizationId = userPo.getTopOrganizationId();
+
+ // 先保存前端传递的 organizationId(如果存在)
+ Long frontendOrganizationId = vehiclePo.getOrganizationId();
+
if (dataPermission != null) {
if (CollUtil.isNotEmpty(dataPermission.getOrganizationIdList())) {
vehiclePo.setOrganizationIdList(dataPermission.getOrganizationIdList());
@@ -147,13 +161,52 @@ public class VehicleApplicationService {
vehiclePo.setCreateBy(dataPermission.getCreateBy());
}
}
- //获取登录人信息
- LoginUser loginUser = SecurityUtils.getLoginUser();
- if (loginUser.getUserPo().getBusinessType() == 2) {
- vehiclePo.setCreateBy(loginUser.getUserPo().getUserId());
- vehiclePo.setOrganizationId(null);
- vehiclePo.setOrganizationIdList(null);
+
+ // businessType == 2 时(司机),设置创建人过滤
+ if (userPo.getBusinessType() == 2) {
+ vehiclePo.setCreateBy(userPo.getUserId());
}
+
+ // 数据权限:根据 organizationId 来设置查询权限
+ // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己
+ if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
+ // 南光组织(organizationId=2827):可以查询所有组织的数据
+ // 如果前端传递了 organizationId,使用前端传递的值进行过滤
+ // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
+ if (frontendOrganizationId != null) {
+ vehiclePo.setOrganizationId(frontendOrganizationId);
+ vehiclePo.setTopOrganizationId(null);
+ vehiclePo.setOrganizationIdList(null);
+ } else {
+ vehiclePo.setOrganizationId(null);
+ vehiclePo.setTopOrganizationId(null);
+ vehiclePo.setOrganizationIdList(null);
+ }
+ } else {
+ // 其他组织:设置 organizationId,只查询当前组织的数据
+ if (frontendOrganizationId != null) {
+ // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致
+ if (!frontendOrganizationId.equals(loginUserOrganizationId)) {
+ log.warn("车辆列表查询 - 前端传递的组织ID {} 与当前登录用户的组织ID {} 不一致,使用当前登录用户的组织ID进行过滤",
+ frontendOrganizationId, loginUserOrganizationId);
+ vehiclePo.setOrganizationId(loginUserOrganizationId);
+ } else {
+ vehiclePo.setOrganizationId(frontendOrganizationId);
+ }
+ vehiclePo.setTopOrganizationId(topOrganizationId);
+ if (loginUserOrganizationId != null) {
+ vehiclePo.setOrganizationIdList(Collections.singletonList(loginUserOrganizationId));
+ }
+ } else {
+ // 前端没有传递 organizationId,使用当前登录用户的组织ID
+ if (loginUserOrganizationId != null) {
+ vehiclePo.setOrganizationId(loginUserOrganizationId);
+ vehiclePo.setOrganizationIdList(Collections.singletonList(loginUserOrganizationId));
+ }
+ vehiclePo.setTopOrganizationId(topOrganizationId);
+ }
+ }
+
//查询所有已经被绑定的车辆
// try {
// R> vehicleIdList = userServiceFeign.getBindListByUserId(loginUser.getUserPo().getUserId());
@@ -193,6 +246,18 @@ public class VehicleApplicationService {
*/
@NeedSetValueMethod
public List getUnBindList(VehiclePo vehiclePo, DataPermission dataPermission) {
+ // 获取登录人信息
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser == null || loginUser.getUserPo() == null) {
+ log.warn("未绑定车辆列表查询 - 未获取到登录用户信息,跳过数据权限过滤");
+ return vehicleDomainService.selectVehicleList(vehiclePo);
+ }
+
+ UserPo userPo = loginUser.getUserPo();
+ Long loginUserOrganizationId = userPo.getOrganizationId();
+ Long topOrganizationId = userPo.getTopOrganizationId();
+ Long frontendOrganizationId = vehiclePo.getOrganizationId();
+
if (dataPermission != null) {
if (CollUtil.isNotEmpty(dataPermission.getOrganizationIdList())) {
vehiclePo.setOrganizationIdList(dataPermission.getOrganizationIdList());
@@ -201,12 +266,35 @@ public class VehicleApplicationService {
vehiclePo.setCreateBy(dataPermission.getCreateBy());
}
}
- //获取登录人信息
- LoginUser loginUser = SecurityUtils.getLoginUser();
- if (loginUser.getUserPo().getBusinessType() == 2) {
- vehiclePo.setCreateBy(loginUser.getUserPo().getUserId());
- vehiclePo.setOrganizationId(null);
+
+ // businessType == 2 时(司机),设置创建人过滤
+ if (userPo.getBusinessType() == 2) {
+ vehiclePo.setCreateBy(userPo.getUserId());
+ }
+
+ // 数据权限:根据 organizationId 来设置查询权限
+ if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
+ // 南光组织(organizationId=2827):可以查询所有组织的数据
+ if (frontendOrganizationId != null) {
+ vehiclePo.setOrganizationId(frontendOrganizationId);
+ } else {
+ vehiclePo.setOrganizationId(null);
+ }
+ vehiclePo.setTopOrganizationId(null);
vehiclePo.setOrganizationIdList(null);
+ } else {
+ // 其他组织:只查询当前组织的数据
+ if (frontendOrganizationId != null && !frontendOrganizationId.equals(loginUserOrganizationId)) {
+ log.warn("未绑定车辆列表查询 - 前端传递的组织ID {} 与当前登录用户的组织ID {} 不一致,使用当前登录用户的组织ID进行过滤",
+ frontendOrganizationId, loginUserOrganizationId);
+ vehiclePo.setOrganizationId(loginUserOrganizationId);
+ } else if (frontendOrganizationId == null) {
+ vehiclePo.setOrganizationId(loginUserOrganizationId);
+ }
+ vehiclePo.setTopOrganizationId(topOrganizationId);
+ if (loginUserOrganizationId != null) {
+ vehiclePo.setOrganizationIdList(Collections.singletonList(loginUserOrganizationId));
+ }
}
//查询所有已经被绑定的车辆
try {
@@ -247,12 +335,49 @@ public class VehicleApplicationService {
*/
@NeedSetValueMethod
public List selectBindVehicleList(VehiclePo vehiclePo, DataPermission dataPermission) {
+ // 获取登录人信息
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser == null || loginUser.getUserPo() == null) {
+ log.warn("绑定车辆列表查询 - 未获取到登录用户信息,跳过数据权限过滤");
+ return vehicleDomainService.selectVehicleList(vehiclePo);
+ }
+
+ UserPo userPo = loginUser.getUserPo();
+ Long loginUserOrganizationId = userPo.getOrganizationId();
+ Long topOrganizationId = userPo.getTopOrganizationId();
+ Long frontendOrganizationId = vehiclePo.getOrganizationId();
+
if (dataPermission != null) {
if (dataPermission.getOrganizationIdList() != null
&& dataPermission.getOrganizationIdList().size() > 0) {
vehiclePo.setOrganizationIdList(dataPermission.getOrganizationIdList());
}
}
+
+ // 数据权限:根据 organizationId 来设置查询权限
+ if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
+ // 南光组织(organizationId=2827):可以查询所有组织的数据
+ if (frontendOrganizationId != null) {
+ vehiclePo.setOrganizationId(frontendOrganizationId);
+ } else {
+ vehiclePo.setOrganizationId(null);
+ }
+ vehiclePo.setTopOrganizationId(null);
+ vehiclePo.setOrganizationIdList(null);
+ } else {
+ // 其他组织:只查询当前组织的数据
+ if (frontendOrganizationId != null && !frontendOrganizationId.equals(loginUserOrganizationId)) {
+ log.warn("绑定车辆列表查询 - 前端传递的组织ID {} 与当前登录用户的组织ID {} 不一致,使用当前登录用户的组织ID进行过滤",
+ frontendOrganizationId, loginUserOrganizationId);
+ vehiclePo.setOrganizationId(loginUserOrganizationId);
+ } else if (frontendOrganizationId == null) {
+ vehiclePo.setOrganizationId(loginUserOrganizationId);
+ }
+ vehiclePo.setTopOrganizationId(topOrganizationId);
+ if (loginUserOrganizationId != null) {
+ vehiclePo.setOrganizationIdList(Collections.singletonList(loginUserOrganizationId));
+ }
+ }
List vehiclePos = vehicleDomainService.selectVehicleList(vehiclePo);
for (VehiclePo po : vehiclePos) {
Map map = userServiceFeign.selectUserBindByVehicleId(po.getVehicleId());
@@ -269,24 +394,43 @@ public class VehicleApplicationService {
*/
@NeedSetValueMethod
public List selectStowageVehiclelist(VehiclePo vehiclePo) {
-// if(dataPermission != null){
-// if(dataPermission.getOrganizationIdList() != null && dataPermission.getOrganizationIdList().size() > 0){
-// vehiclePo.setOrganizationIdList(dataPermission.getOrganizationIdList());
-// }
-// if(dataPermission.getCreateBy() != null){
-// vehiclePo.setCreateBy(dataPermission.getCreateBy());
-// }
-// }
- //获取登录人信息
+ // 获取登录人信息
LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser == null || loginUser.getUserPo() == null) {
+ log.warn("配载车辆列表查询 - 未获取到登录用户信息,跳过数据权限过滤");
+ return vehicleDomainService.selectStowageVehiclelist(vehiclePo);
+ }
+
UserPo userPo = loginUser.getUserPo();
+ Long loginUserOrganizationId = userPo.getOrganizationId();
+ Long topOrganizationId = userPo.getTopOrganizationId();
+ Long frontendOrganizationId = vehiclePo.getOrganizationId();
+
if (ObjectUtil.equals(userPo.getUserAccountType(), 3)) {
vehiclePo.setUserAccountType(3);
- vehiclePo.setTopOrganizationId(userPo.getTopOrganizationId());
- } else {
- vehiclePo.setTopOrganizationId(userPo.getTopOrganizationId());
- vehiclePo.setOrganizationId(userPo.getOrganizationId());
}
+
+ // 数据权限:根据 organizationId 来设置查询权限
+ if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
+ // 南光组织(organizationId=2827):可以查询所有组织的数据
+ if (frontendOrganizationId != null) {
+ vehiclePo.setOrganizationId(frontendOrganizationId);
+ } else {
+ vehiclePo.setOrganizationId(null);
+ }
+ vehiclePo.setTopOrganizationId(null);
+ } else {
+ // 其他组织:只查询当前组织的数据
+ if (frontendOrganizationId != null && !frontendOrganizationId.equals(loginUserOrganizationId)) {
+ log.warn("配载车辆列表查询 - 前端传递的组织ID {} 与当前登录用户的组织ID {} 不一致,使用当前登录用户的组织ID进行过滤",
+ frontendOrganizationId, loginUserOrganizationId);
+ vehiclePo.setOrganizationId(loginUserOrganizationId);
+ } else if (frontendOrganizationId == null) {
+ vehiclePo.setOrganizationId(loginUserOrganizationId);
+ }
+ vehiclePo.setTopOrganizationId(topOrganizationId);
+ }
+
return vehicleDomainService.selectStowageVehiclelist(vehiclePo);
}
@@ -585,8 +729,18 @@ public class VehicleApplicationService {
if (currentVehiclePo != null) {
Vehicle vehicleForWlhy = new Vehicle(); // 使用领域对象
BeanUtils.copyProperties(currentVehiclePo, vehicleForWlhy);
- vehicleWlhyDomainService.addVehicleInfo(vehicleForWlhy, 1); // 2 代表某种类型或状态
- vehiclePendingReviewPush(loginUser);
+ vehicleForWlhy.setUserId(currentVehiclePo.getUserId());
+ try {
+ vehicleWlhyDomainService.addVehicleInfo(vehicleForWlhy, 1); // 1 代表绑定类型
+ vehiclePendingReviewPush(loginUser);
+ } catch (ServiceException e) {
+ // 同步网货失败时,记录日志但不影响车辆保存
+ // 第一次新增时,用户信息可能还未同步到网货系统,导致失败
+ // 第二次新增时,用户信息已存在,可以成功同步
+ log.warn("同步网货信息失败,但不影响车辆保存: {}", e.getMessage());
+ // 如果业务要求必须同步成功,可以取消下面的注释,让异常抛出
+ // throw e;
+ }
} else {
log.warn("未能找到刚保存的车辆信息用于同步网货,VehicleId: {}", vehicle.getVehicleId());
}
@@ -607,11 +761,18 @@ public class VehicleApplicationService {
LoginUser loginUser = SecurityUtils.getLoginUser();
//当前组织id
Long organizationId = 0L;
+ Long topOrganizationId = 0L;
String organizationName = "";
if (loginUser != null) {
- if (loginUser.getUserPo() != null && loginUser.getUserPo().getOrganizationId() != null) {
- organizationId = loginUser.getUserPo().getOrganizationId();
- organizationName = loginUser.getUserPo().getOrganizationName();
+ UserPo userPo = loginUser.getUserPo();
+ if (userPo != null) {
+ if (userPo.getOrganizationId() != null) {
+ organizationId = userPo.getOrganizationId();
+ organizationName = userPo.getOrganizationName();
+ }
+ if (userPo.getTopOrganizationId() != null) {
+ topOrganizationId = userPo.getTopOrganizationId();
+ }
}
}
UserConfigSwitchPo userConfigSwitchPo = commonApplicationService.getUserConfigSwitch();
@@ -660,8 +821,10 @@ public class VehicleApplicationService {
}
}
+ // 设置当前登录用户的组织信息
vehicle.setOrganizationId(organizationId);
vehicle.setOrganizationName(organizationName);
+ vehicle.setTopOrganizationId(topOrganizationId);
VehiclePo oldVehiclePo = null;
if (ObjectUtil.isNotNull(vehicle.getVehicleId())) {
@@ -830,12 +993,8 @@ public class VehicleApplicationService {
// }
// 6. 持久化操作 (统一的 insert 或 update)
+ // 注意:组织信息已在前面设置(第670-673行),这里不需要重复设置
if (ObjectUtil.isNull(vehicle.getVehicleId())) { // 新增
- if (loginUser != null) {
- vehicle.setOrganizationId(loginUser.getUserPo().getOrganizationId());
- vehicle.setOrganizationName(loginUser.getUserPo().getOrganizationName());
- vehicle.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
- }
vehicleDomainService.insertVehicle(vehicle);
} else {
// 确保 vehicleId 是从 DTO 传递过来的,并且 oldVehiclePo 已被正确加载
@@ -875,8 +1034,17 @@ public class VehicleApplicationService {
Vehicle vehicleForWlhy = new Vehicle(); // 使用领域对象
BeanUtils.copyProperties(currentVehiclePo, vehicleForWlhy);
vehicleForWlhy.setUserId(currentVehiclePo.getUserId());
- vehicleWlhyDomainService.addVehicleInfo(vehicleForWlhy, 1); // 2 代表某种类型或状态
- vehiclePendingReviewPush(loginUser);
+ try {
+ vehicleWlhyDomainService.addVehicleInfo(vehicleForWlhy, 1); // 1 代表绑定类型
+ vehiclePendingReviewPush(loginUser);
+ } catch (ServiceException e) {
+ // 同步网货失败时,记录日志但不影响车辆保存
+ // 第一次新增时,用户信息可能还未同步到网货系统,导致失败
+ // 第二次新增时,用户信息已存在,可以成功同步
+ log.warn("同步网货信息失败,但不影响车辆保存: {}", e.getMessage());
+ // 如果业务要求必须同步成功,可以取消下面的注释,让异常抛出
+ // throw e;
+ }
} else {
log.warn("未能找到刚保存的车辆信息用于同步网货,VehicleId: {}", vehicle.getVehicleId());
}
diff --git a/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/inBoundOrder/InboundOrderService.java b/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/inBoundOrder/InboundOrderService.java
index 957360478..83a01c4a7 100644
--- a/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/inBoundOrder/InboundOrderService.java
+++ b/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/inBoundOrder/InboundOrderService.java
@@ -22,6 +22,7 @@ import com.linke.transport.interfaces.dto.warehouse.inBoundOrder.InboundOrderDTO
import com.linke.transport.interfaces.dto.warehouse.inBoundOrder.InboundOrderDTO.Create;
import com.mhd.common.core.utils.OrderSequence;
import com.mhd.common.security.utils.SecurityUtils;
+import com.mhd.system.api.model.LoginUser;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
@@ -292,7 +293,7 @@ public class InboundOrderService extends ServiceImpl buildQueryWrapper(InboundOrderDTO.Query queryDTO) {
- return new LambdaQueryWrapper()
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper()
.like(StringUtils.hasText(queryDTO.getInboundOrderNo()),
InboundOrder::getInboundOrderNo, queryDTO.getInboundOrderNo())
.eq(Objects.nonNull(queryDTO.getOwnerId()),
@@ -304,8 +305,44 @@ public class InboundOrderService extends ServiceImpl wrapper) {
+ try {
+ com.mhd.system.api.model.LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
+
+ // 如果当前登录用户的organizationId为2827(南光组织),可以查询全部组织数据
+ // 其他组织只能查询自己组织的数据
+ if (loginUserOrganizationId != null && !loginUserOrganizationId.equals(2827L)) {
+ // 其他组织:需要通过Material关联来过滤
+ // 由于InboundOrder没有直接的组织字段,需要通过明细关联Material来过滤
+ // 使用EXISTS子查询:只查询包含当前组织物料的入库单
+ wrapper.exists(String.format(
+ "SELECT 1 FROM inbound_order_detail iod " +
+ "INNER JOIN material m ON iod.material_id = m.id AND m.is_deleted = 0 " +
+ "WHERE iod.inbound_order_id = inbound_order.id " +
+ "AND iod.is_deleted = 0 " +
+ "AND m.organization_id = '%s'",
+ loginUserOrganizationId));
+ }
+ // 如果是2827组织,不添加过滤条件,可以查询全部
+ }
+ } catch (Exception e) {
+ log.warn("应用组织数据权限过滤失败,将不进行组织过滤: {}", e.getMessage());
+ // 如果获取登录用户信息失败,不添加过滤条件,避免影响正常查询
+ }
}
/**
diff --git a/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/inventory/InventoryService.java b/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/inventory/InventoryService.java
index 7eb6f8fac..52776bc8f 100644
--- a/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/inventory/InventoryService.java
+++ b/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/inventory/InventoryService.java
@@ -14,6 +14,7 @@ import com.linke.transport.domain.warehouse.material.repository.MaterialReposito
import com.linke.transport.infrastructure.warehouse.inventory.persistence.InventoryMapper;
import com.linke.transport.interfaces.dto.warehouse.inventory.InventoryDTO;
import com.mhd.common.security.utils.SecurityUtils;
+import com.mhd.system.api.model.LoginUser;
import java.math.BigDecimal;
import java.util.List;
import java.util.NoSuchElementException;
@@ -50,12 +51,63 @@ public class InventoryService extends ServiceImpl {
// 1. 创建分页请求对象 (注意泛型是 VO)
Page page = new Page<>(queryDTO.getPageNo(), queryDTO.getPageSize());
- // 2. 调用 Mapper 的自定义分页查询方法 (该方法执行 JOIN)
+ // 2. 应用组织数据权限过滤(在XML中通过Material表的organizationId过滤)
+ applyOrganizationDataPermission(queryDTO);
+
+ // 3. 调用 Mapper 的自定义分页查询方法 (该方法执行 JOIN)
return inventoryMapper.findInventoryList(page, queryDTO);
}
+ /**
+ * 应用组织数据权限过滤
+ * 设置organizationId到queryDTO中,供XML使用
+ */
+ private void applyOrganizationDataPermission(InventoryDTO.Query queryDTO) {
+ try {
+ com.mhd.system.api.model.LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
+
+ // 如果当前登录用户的organizationId为2827(南光组织),可以查询全部组织数据
+ // 其他组织只能查询自己组织的数据
+ if (loginUserOrganizationId != null && !loginUserOrganizationId.equals(2827L)) {
+ // 设置organizationId到queryDTO中,供XML使用
+ // 注意:需要在InventoryDTO.Query中添加organizationId字段
+ // 由于Material的organizationId是String类型,需要转换为String
+ if (queryDTO.getOrganizationId() == null) {
+ queryDTO.setOrganizationId(String.valueOf(loginUserOrganizationId));
+ }
+ }
+ // 如果是2827组织,不设置organizationId,可以查询全部
+ }
+ } catch (Exception e) {
+ log.warn("应用组织数据权限过滤失败,将不进行组织过滤: {}", e.getMessage());
+ }
+ }
+
public List listAllInventory(Long ownerId,String machineSerialNo) {
- return inventoryMapper.findAllInventoryList(ownerId,machineSerialNo);
+ // 应用组织数据权限过滤
+ String organizationId = getOrganizationIdForFilter();
+ return inventoryMapper.findAllInventoryList(ownerId, machineSerialNo, organizationId);
+ }
+
+ /**
+ * 获取用于过滤的组织ID(String类型,因为Material表的organizationId是String)
+ * @return 如果不是2827组织,返回组织ID字符串;如果是2827,返回null(可查全部)
+ */
+ private String getOrganizationIdForFilter() {
+ try {
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
+ if (loginUserOrganizationId != null && !loginUserOrganizationId.equals(2827L)) {
+ return String.valueOf(loginUserOrganizationId);
+ }
+ }
+ } catch (Exception e) {
+ log.warn("获取组织ID失败: {}", e.getMessage());
+ }
+ return null; // 2827组织或获取失败时返回null,可查全部
}
/**
diff --git a/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/inventoryLedger/InventoryLedgerService.java b/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/inventoryLedger/InventoryLedgerService.java
index 5c0b870eb..694c5ce77 100644
--- a/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/inventoryLedger/InventoryLedgerService.java
+++ b/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/inventoryLedger/InventoryLedgerService.java
@@ -51,8 +51,12 @@ public class InventoryLedgerService extends ServiceImpl(query.getPageNo(), query.getPageSize()), wrapper)
.convert(item -> {
@@ -62,6 +66,34 @@ public class InventoryLedgerService extends ServiceImpl wrapper) {
+ try {
+ com.mhd.system.api.model.LoginUser loginUser = com.mhd.common.security.utils.SecurityUtils.getLoginUser();
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
+
+ // 如果当前登录用户的organizationId为2827(南光组织),可以查询全部组织数据
+ // 其他组织只能查询自己组织的数据
+ if (loginUserOrganizationId != null && !loginUserOrganizationId.equals(2827L)) {
+ // 其他组织:需要通过Material关联来过滤
+ // 由于InventoryLedger表中有materialId字段,我们通过EXISTS子查询关联Material来过滤
+ wrapper.exists(String.format(
+ "SELECT 1 FROM material m " +
+ "WHERE m.id = inventory_ledger.material_id " +
+ "AND m.organization_id = '%s' AND m.is_deleted = 0",
+ loginUserOrganizationId));
+ }
+ // 如果是2827组织,不添加过滤条件,可以查询全部
+ }
+ } catch (Exception e) {
+ // 如果获取登录用户信息失败,不添加过滤条件,避免影响正常查询
+ }
+ }
+
/**
* 根据货主ID更新货主名称
* @param ownerId 货主ID
diff --git a/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/material/command/CreateMaterialCommand.java b/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/material/command/CreateMaterialCommand.java
index a907e2d2a..a9c5f1409 100644
--- a/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/material/command/CreateMaterialCommand.java
+++ b/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/material/command/CreateMaterialCommand.java
@@ -58,4 +58,6 @@ public class CreateMaterialCommand {
private String topOrganizationId;
/**组织相关*/
private String organizationId;
+ /**组织相关*/
+ private String organizationName;
}
diff --git a/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/material/command/MaterialCommandService.java b/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/material/command/MaterialCommandService.java
index 92c05251d..3370ee1a3 100644
--- a/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/material/command/MaterialCommandService.java
+++ b/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/material/command/MaterialCommandService.java
@@ -38,7 +38,7 @@ public class MaterialCommandService {
command.getWeight(),
command.getMaterialVolume(),
command.getMaterialContent(),
- command.getRemark(),command.getTopOrganizationId(),command.getOrganizationId(),
+ command.getRemark(),command.getTopOrganizationId(),command.getOrganizationId(),command.getOrganizationName(),
codeGenerator
);
return materialRepository.save(material).getId();
@@ -61,7 +61,7 @@ public class MaterialCommandService {
command.getWeight(),
command.getMaterialVolume(),
command.getMaterialContent(),
- command.getRemark(),command.getTopOrganizationId(),command.getOrganizationId()
+ command.getRemark(),command.getTopOrganizationId(),command.getOrganizationId(),command.getOrganizationName()
);
materialRepository.update(material);
diff --git a/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/material/command/UpdateMaterialCommand.java b/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/material/command/UpdateMaterialCommand.java
index 65267c151..2c281551b 100644
--- a/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/material/command/UpdateMaterialCommand.java
+++ b/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/material/command/UpdateMaterialCommand.java
@@ -51,4 +51,6 @@ public class UpdateMaterialCommand {
private String topOrganizationId;
/**组织相关*/
private String organizationId;
+ /**组织相关*/
+ private String organizationName;
}
diff --git a/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/material/query/MaterialQueryCommand.java b/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/material/query/MaterialQueryCommand.java
index c55028e91..403b7e1ee 100644
--- a/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/material/query/MaterialQueryCommand.java
+++ b/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/material/query/MaterialQueryCommand.java
@@ -34,4 +34,10 @@ public class MaterialQueryCommand {
private BigDecimal materialVolume;
@ApiModelProperty(value = "物料内容")
private String materialContent;
+ @ApiModelProperty(value = "组织ID")
+ private String organizationId;
+ @ApiModelProperty(value = "组织名称")
+ private String organizationName;
+ @ApiModelProperty(value = "一级组织ID")
+ private String topOrganizationId;
}
diff --git a/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/material/query/MaterialQueryService.java b/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/material/query/MaterialQueryService.java
index 094cc328d..5a2715a81 100644
--- a/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/material/query/MaterialQueryService.java
+++ b/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/material/query/MaterialQueryService.java
@@ -5,6 +5,9 @@ import com.linke.transport.application.service.warehouse.material.vo.MaterialVO;
import com.linke.transport.domain.warehouse.material.exception.MaterialDomainException;
import com.linke.transport.domain.warehouse.material.repository.MaterialRepository;
import com.linke.transport.infrastructure.warehouse.material.converter.MaterialConverter;
+import com.mhd.common.core.utils.StringUtils;
+import com.mhd.system.api.model.LoginUser;
+import com.mhd.common.security.utils.SecurityUtils;
import java.util.List;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
@@ -20,15 +23,79 @@ public class MaterialQueryService {
* 分页查询物料
*/
public IPage queryMaterials(MaterialQueryCommand param) {
- return materialRepository.search(
+ // 先保存前端传递的 organizationId(如果存在)
+ String frontendOrganizationId = param.getOrganizationId();
+
+ // 获取当前登录用户的组织信息
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ Long loginUserOrganizationId = null;
+ Long topOrganizationId = null;
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
+ topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
+ }
+
+ // 数据权限:根据organizationId来设置查询权限
+ // organizationId等于2827时查询全部,其他仅查询各自组织的信息
+ if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
+ // 南光组织(organizationId=2827):可以查询所有组织的数据
+ // 如果前端传递了 organizationId,使用前端传递的值进行过滤(包括2827)
+ // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
+ if (StringUtils.isNotBlank(frontendOrganizationId)) {
+ // 前端传递了 organizationId,使用前端传递的值进行过滤
+ param.setOrganizationId(frontendOrganizationId);
+ param.setTopOrganizationId(null);
+ } else {
+ // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据
+ param.setOrganizationId(null);
+ param.setTopOrganizationId(null);
+ }
+ } else {
+ // 其他组织:设置organizationId,只查询当前组织的数据
+ // 其他组织只能查询自己组织的数据,不能查询其他组织(包括南光)的数据
+ // 如果其他组织尝试查询南光(organizationId=2827)的数据,返回空数据
+ if (StringUtils.isNotBlank(frontendOrganizationId)) {
+ // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致
+ if ("2827".equals(frontendOrganizationId)) {
+ // 其他组织尝试查询南光的数据,设置一个不存在的 organizationId,返回空数据
+ param.setOrganizationId("-1");
+ param.setTopOrganizationId(null);
+ } else if (!frontendOrganizationId.equals(String.valueOf(loginUserOrganizationId))) {
+ // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询
+ param.setOrganizationId(String.valueOf(loginUserOrganizationId));
+ if (topOrganizationId != null) {
+ param.setTopOrganizationId(String.valueOf(topOrganizationId));
+ }
+ } else {
+ // 前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值
+ param.setOrganizationId(frontendOrganizationId);
+ if (topOrganizationId != null) {
+ param.setTopOrganizationId(String.valueOf(topOrganizationId));
+ }
+ }
+ } else {
+ // 前端没有传递 organizationId,使用当前登录用户的组织ID
+ if (loginUserOrganizationId != null) {
+ param.setOrganizationId(String.valueOf(loginUserOrganizationId));
+ }
+ if (topOrganizationId != null) {
+ param.setTopOrganizationId(String.valueOf(topOrganizationId));
+ }
+ }
+ }
+
+ return materialRepository.search(
param.getShipper(),
param.getCategory(),
param.getName(),
param.getModel(),
param.getMaterialCode(),
- param.getCodeManaged(),
- param.getRemark(),
+ param.getCodeManaged(),
+ param.getRemark(),
param.getMaterialContent(),
+ param.getOrganizationId(),
+ param.getOrganizationName(),
+ param.getTopOrganizationId(),
param.getPageNo(),
param.getPageSize()
).convert(MaterialConverter :: convertToVO);
@@ -51,7 +118,32 @@ public class MaterialQueryService {
* @return 所有材料的列表,以MaterialVO形式表示
*/
public List getAllMaterials(Long ownerId) {
- return materialRepository.findAllMaterials(ownerId)
+ // 获取当前登录用户的组织信息
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ String organizationId = null;
+ String topOrganizationId = null;
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
+ Long topOrgId = loginUser.getUserPo().getTopOrganizationId();
+
+ // 数据权限:根据organizationId来设置查询权限
+ // organizationId等于2827时查询全部,其他仅查询各自组织的信息
+ if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) {
+ // 南光组织(organizationId=2827):不设置组织过滤条件,可以查询所有组织的数据
+ organizationId = null;
+ topOrganizationId = null;
+ } else {
+ // 其他组织:设置organizationId,只查询当前组织的数据
+ if (loginUserOrganizationId != null) {
+ organizationId = String.valueOf(loginUserOrganizationId);
+ }
+ if (topOrgId != null) {
+ topOrganizationId = String.valueOf(topOrgId);
+ }
+ }
+ }
+
+ return materialRepository.findAllMaterials(ownerId, organizationId, null, topOrganizationId)
.stream()
.map(MaterialConverter :: convertToVO)
.collect(Collectors.toList());
diff --git a/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/material/vo/MaterialVO.java b/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/material/vo/MaterialVO.java
index 85fee3a81..4685de507 100644
--- a/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/material/vo/MaterialVO.java
+++ b/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/material/vo/MaterialVO.java
@@ -53,4 +53,10 @@ public class MaterialVO{
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
+ @ApiModelProperty("组织ID")
+ private String organizationId;
+ @ApiModelProperty("组织名称")
+ private String organizationName;
+ @ApiModelProperty("一级组织ID")
+ private String topOrganizationId;
}
diff --git a/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/outBoundOrder/OutboundOrderService.java b/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/outBoundOrder/OutboundOrderService.java
index d6a18cdc8..42b411bfa 100644
--- a/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/outBoundOrder/OutboundOrderService.java
+++ b/mhd_transport/src/main/java/com/linke/transport/application/service/warehouse/outBoundOrder/OutboundOrderService.java
@@ -21,6 +21,7 @@ import com.linke.transport.interfaces.dto.warehouse.outBoundOrder.OutboundOrderD
import com.linke.transport.interfaces.dto.warehouse.outBoundOrder.OutboundOrderDTO.Create;
import com.mhd.common.core.utils.OrderSequence;
import com.mhd.common.security.utils.SecurityUtils;
+import com.mhd.system.api.model.LoginUser;
import java.math.BigDecimal;
import java.util.ArrayList;
@@ -311,7 +312,7 @@ public class OutboundOrderService extends ServiceImpl buildListQueryWrapper(OutboundOrderDTO.Query queryDTO) {
- return new LambdaQueryWrapper()
+ LambdaQueryWrapper wrapper = new LambdaQueryWrapper()
.like(StringUtils.hasText(queryDTO.getOutboundOrderNo()),
OutboundOrder::getOutboundOrderNo, queryDTO.getOutboundOrderNo())
.eq(Objects.nonNull(queryDTO.getOwnerId()),
@@ -323,9 +324,44 @@ public class OutboundOrderService extends ServiceImpl wrapper) {
+ try {
+ com.mhd.system.api.model.LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId();
+
+ // 如果当前登录用户的organizationId为2827(南光组织),可以查询全部组织数据
+ // 其他组织只能查询自己组织的数据
+ if (loginUserOrganizationId != null && !loginUserOrganizationId.equals(2827L)) {
+ // 其他组织:需要通过Material关联来过滤
+ // 由于OutboundOrder没有直接的组织字段,需要通过明细关联Material来过滤
+ // 使用EXISTS子查询:只查询包含当前组织物料的出库单
+ wrapper.exists(String.format(
+ "SELECT 1 FROM outbound_order_detail ood " +
+ "INNER JOIN material m ON ood.material_id = m.id AND m.is_deleted = 0 " +
+ "WHERE ood.outbound_order_id = outbound_order.id " +
+ "AND ood.is_deleted = 0 " +
+ "AND m.organization_id = '%s'",
+ loginUserOrganizationId));
+ }
+ // 如果是2827组织,不添加过滤条件,可以查询全部
+ }
+ } catch (Exception e) {
+ log.warn("应用组织数据权限过滤失败,将不进行组织过滤: {}", e.getMessage());
+ // 如果获取登录用户信息失败,不添加过滤条件,避免影响正常查询
+ }
}
/**
diff --git a/mhd_transport/src/main/java/com/linke/transport/domain/vehicle/service/VehicleWlhyDomainService.java b/mhd_transport/src/main/java/com/linke/transport/domain/vehicle/service/VehicleWlhyDomainService.java
index d47e428cd..a748d2a33 100644
--- a/mhd_transport/src/main/java/com/linke/transport/domain/vehicle/service/VehicleWlhyDomainService.java
+++ b/mhd_transport/src/main/java/com/linke/transport/domain/vehicle/service/VehicleWlhyDomainService.java
@@ -243,9 +243,17 @@ public class VehicleWlhyDomainService
tmsVehicleDTO.setDrivingPermitExpDate(vehicle.getVehicleCheckoutPeriodValidity());
tmsVehicleDTO.setDrivingPermitNumber(vehicle.getVehicleFileNumber());
tmsVehicleDTO.setTransportPermitNumber(vehicle.getRoadTransportCertificateNo());
- tmsVehicleDTO.setOrganizationId(loginUser.getUserPo().getOrganizationId());
- tmsVehicleDTO.setOrganizationName(loginUser.getUserPo().getOrganizationName());
- tmsVehicleDTO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
+ // 优先使用 vehicle 对象中保存的组织信息,确保与数据库中的组织ID一致
+ // 如果 vehicle 中没有组织信息,则使用当前登录用户的组织信息作为后备
+ if (vehicle.getOrganizationId() != null) {
+ tmsVehicleDTO.setOrganizationId(vehicle.getOrganizationId());
+ tmsVehicleDTO.setOrganizationName(vehicle.getOrganizationName());
+ tmsVehicleDTO.setTopOrganizationId(vehicle.getTopOrganizationId());
+ } else if (loginUser.getUserPo() != null) {
+ tmsVehicleDTO.setOrganizationId(loginUser.getUserPo().getOrganizationId());
+ tmsVehicleDTO.setOrganizationName(loginUser.getUserPo().getOrganizationName());
+ tmsVehicleDTO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
+ }
if (vehicle.getUseStatus() == 2){
tmsVehicleDTO.setBlacklistStatus(1);
}else {
diff --git a/mhd_transport/src/main/java/com/linke/transport/domain/warehouse/material/model/Material.java b/mhd_transport/src/main/java/com/linke/transport/domain/warehouse/material/model/Material.java
index 08f97c6cb..b651758c4 100644
--- a/mhd_transport/src/main/java/com/linke/transport/domain/warehouse/material/model/Material.java
+++ b/mhd_transport/src/main/java/com/linke/transport/domain/warehouse/material/model/Material.java
@@ -37,6 +37,8 @@ public class Material {
private String topOrganizationId;
/**组织相关*/
private String organizationId;
+ /**组织相关*/
+ private String organizationName;
// 私有构造方法
@@ -51,7 +53,7 @@ public class Material {
BigDecimal weight,
BigDecimal materialVolume,
String materialContent,
- String remark,String topOrganizationId,String organizationId ) {
+ String remark,String topOrganizationId,String organizationId,String organizationName ) {
validateRequiredFields( category, name, unit);
this.ownerId = ownerId;
this.shipper = shipper;
@@ -69,6 +71,7 @@ public class Material {
this.updateTime = LocalDateTime.now();
this.topOrganizationId = topOrganizationId;
this.organizationId = organizationId;
+ this.organizationName = organizationName;
}
@@ -84,11 +87,11 @@ public class Material {
BigDecimal weight,
BigDecimal materialVolume,
String materialContent,
- String remark,String topOrganizationId,String organizationId,
+ String remark,String topOrganizationId,String organizationId,String organizationName,
MaterialCodeGenerator codeGenerator) {
Material material = new Material(ownerId, shipper, category, name, model,
unit, value, codeManaged, weight, materialVolume, materialContent, remark,
- topOrganizationId,organizationId
+ topOrganizationId,organizationId,organizationName
);
material.materialCode = codeGenerator.generate();
return material;
@@ -104,7 +107,7 @@ public class Material {
BigDecimal weight,
BigDecimal materialVolume,
String materialContent,
- String remark,String topOrganizationId,String organizationId ) {
+ String remark,String topOrganizationId,String organizationId,String organizationName ) {
this.ownerId = ownerId;
this.shipper = shipper;
this.category = category;
@@ -120,6 +123,7 @@ public class Material {
this.updateTime = LocalDateTime.now();
this.topOrganizationId = topOrganizationId;
this.organizationId = organizationId;
+ this.organizationName = organizationName;
}
// 保留的核心校验
diff --git a/mhd_transport/src/main/java/com/linke/transport/domain/warehouse/material/repository/MaterialRepository.java b/mhd_transport/src/main/java/com/linke/transport/domain/warehouse/material/repository/MaterialRepository.java
index 8ab55359d..1a9ffbca9 100644
--- a/mhd_transport/src/main/java/com/linke/transport/domain/warehouse/material/repository/MaterialRepository.java
+++ b/mhd_transport/src/main/java/com/linke/transport/domain/warehouse/material/repository/MaterialRepository.java
@@ -57,15 +57,19 @@ public interface MaterialRepository {
* @return 分页的物料数据
*/
IPage search(String shipper, String category, String name,String model,String materialCode,Boolean codeManaged,String remark,String materialContent,
+ String organizationId, String organizationName, String topOrganizationId,
Long current, Long size);
/**
* 获取所有物料。
*
* @param ownerId 物料所属者ID
+ * @param organizationId 组织ID
+ * @param organizationName 组织名称
+ * @param topOrganizationId 一级组织ID
* @return 物料对象列表
*/
- List findAllMaterials(Long ownerId);
+ List findAllMaterials(Long ownerId, String organizationId, String organizationName, String topOrganizationId);
/**
* 根据所属者ID更新所属者名称。
diff --git a/mhd_transport/src/main/java/com/linke/transport/infrastructure/warehouse/inventory/persistence/InventoryMapper.java b/mhd_transport/src/main/java/com/linke/transport/infrastructure/warehouse/inventory/persistence/InventoryMapper.java
index aabede579..c101c5007 100644
--- a/mhd_transport/src/main/java/com/linke/transport/infrastructure/warehouse/inventory/persistence/InventoryMapper.java
+++ b/mhd_transport/src/main/java/com/linke/transport/infrastructure/warehouse/inventory/persistence/InventoryMapper.java
@@ -44,5 +44,7 @@ public interface InventoryMapper extends BaseMapper {
*/
Page findInventoryList(@Param("page") Page page, @Param("query") InventoryDTO.Query query);
- List findAllInventoryList(@Param("ownerId") Long ownerId,@Param("machineSerialNo")String machineSerialNo);
+ List findAllInventoryList(@Param("ownerId") Long ownerId,
+ @Param("machineSerialNo") String machineSerialNo,
+ @Param("organizationId") String organizationId);
}
diff --git a/mhd_transport/src/main/java/com/linke/transport/infrastructure/warehouse/material/persistence/MaterialDO.java b/mhd_transport/src/main/java/com/linke/transport/infrastructure/warehouse/material/persistence/MaterialDO.java
index 7662cb0c1..6fe57f3a5 100644
--- a/mhd_transport/src/main/java/com/linke/transport/infrastructure/warehouse/material/persistence/MaterialDO.java
+++ b/mhd_transport/src/main/java/com/linke/transport/infrastructure/warehouse/material/persistence/MaterialDO.java
@@ -40,4 +40,6 @@ public class MaterialDO {
private String topOrganizationId;
/**组织相关*/
private String organizationId;
+ /**组织相关*/
+ private String organizationName;
}
diff --git a/mhd_transport/src/main/java/com/linke/transport/infrastructure/warehouse/material/repository/MaterialRepositoryImpl.java b/mhd_transport/src/main/java/com/linke/transport/infrastructure/warehouse/material/repository/MaterialRepositoryImpl.java
index f7a21ece1..d3e59e0e7 100644
--- a/mhd_transport/src/main/java/com/linke/transport/infrastructure/warehouse/material/repository/MaterialRepositoryImpl.java
+++ b/mhd_transport/src/main/java/com/linke/transport/infrastructure/warehouse/material/repository/MaterialRepositoryImpl.java
@@ -59,6 +59,7 @@ public class MaterialRepositoryImpl implements MaterialRepository {
@Override
public IPage search(String shipper, String category, String name, String model,String materialCode,Boolean codeManaged,String remark,String materialContent,
+ String organizationId, String organizationName, String topOrganizationId,
Long current, Long size) {
LambdaQueryWrapper wrapper = Wrappers.lambdaQuery()
.eq(StringUtils.isNotBlank(shipper), MaterialDO :: getShipper, shipper)
@@ -69,6 +70,12 @@ public class MaterialRepositoryImpl implements MaterialRepository {
.eq(null!=codeManaged, MaterialDO :: getCodeManaged, codeManaged)
.like(StringUtils.isNotBlank(remark), MaterialDO :: getRemark, remark)
.like(StringUtils.isNotBlank(materialContent), MaterialDO :: getMaterialContent, materialContent)
+ .eq(StringUtils.isNotBlank(organizationId), MaterialDO :: getOrganizationId, organizationId)
+ .like(StringUtils.isNotBlank(organizationName), MaterialDO :: getOrganizationName, organizationName)
+ .eq(StringUtils.isNotBlank(topOrganizationId), MaterialDO :: getTopOrganizationId, topOrganizationId)
+ // 当设置了 organizationId 或 topOrganizationId 时,排除 organizationName 为 null 的数据
+ .and(StringUtils.isNotBlank(organizationId) || StringUtils.isNotBlank(topOrganizationId),
+ w -> w.isNotNull(MaterialDO::getOrganizationName))
.orderByDesc(MaterialDO :: getCreateTime);
return materialMapper.selectPage(new Page<>(current, size), wrapper)
@@ -86,9 +93,18 @@ public class MaterialRepositoryImpl implements MaterialRepository {
}
@Override
- public List findAllMaterials(Long ownerId) {
+ public List findAllMaterials(Long ownerId, String organizationId, String organizationName, String topOrganizationId) {
+ LambdaQueryWrapper wrapper = Wrappers.lambdaQuery()
+ .eq(Objects.nonNull(ownerId), MaterialDO :: getOwnerId, ownerId)
+ .eq(StringUtils.isNotBlank(organizationId), MaterialDO :: getOrganizationId, organizationId)
+ .like(StringUtils.isNotBlank(organizationName), MaterialDO :: getOrganizationName, organizationName)
+ .eq(StringUtils.isNotBlank(topOrganizationId), MaterialDO :: getTopOrganizationId, topOrganizationId)
+ // 当设置了 organizationId 或 topOrganizationId 时,排除 organizationName 为 null 的数据
+ .and(StringUtils.isNotBlank(organizationId) || StringUtils.isNotBlank(topOrganizationId),
+ w -> w.isNotNull(MaterialDO::getOrganizationName));
+
return materialMapper
- .selectList(Wrappers.lambdaQuery().eq(Objects.nonNull(ownerId),MaterialDO :: getOwnerId, ownerId))
+ .selectList(wrapper)
.stream()
.map(MaterialConverter :: convert)
.collect(Collectors.toList());
diff --git a/mhd_transport/src/main/java/com/linke/transport/interfaces/dto/warehouse/inventory/InventoryDTO.java b/mhd_transport/src/main/java/com/linke/transport/interfaces/dto/warehouse/inventory/InventoryDTO.java
index a1a18e9ab..351ecdd16 100644
--- a/mhd_transport/src/main/java/com/linke/transport/interfaces/dto/warehouse/inventory/InventoryDTO.java
+++ b/mhd_transport/src/main/java/com/linke/transport/interfaces/dto/warehouse/inventory/InventoryDTO.java
@@ -51,7 +51,8 @@ public class InventoryDTO {
@ApiModelProperty(value = "创建时间")
private Date createdAtEnd;
-
+ @ApiModelProperty(value = "组织ID(用于数据权限过滤,内部使用)", hidden = true)
+ private String organizationId;
@ApiModelProperty(value = "页码,从1开始", required = true, example = "1")
@NotNull(message = "页码不能为空")
diff --git a/mhd_transport/src/main/java/com/linke/transport/interfaces/facadeApi/warehouse/MaterialApi.java b/mhd_transport/src/main/java/com/linke/transport/interfaces/facadeApi/warehouse/MaterialApi.java
index d629c421a..443167310 100644
--- a/mhd_transport/src/main/java/com/linke/transport/interfaces/facadeApi/warehouse/MaterialApi.java
+++ b/mhd_transport/src/main/java/com/linke/transport/interfaces/facadeApi/warehouse/MaterialApi.java
@@ -39,6 +39,19 @@ public class MaterialApi {
@PostMapping
@Log(title = "物料管理(PC)", description = "TMS-创建物料", businessType = BusinessType.INSERT)
public R createMaterial(@Valid @RequestBody CreateMaterialCommand command) {
+ // 设置当前登录用户的组织信息
+ com.mhd.system.api.model.LoginUser loginUser = com.mhd.common.security.utils.SecurityUtils.getLoginUser();
+ if (loginUser != null && loginUser.getUserPo() != null) {
+ if (command.getTopOrganizationId() == null) {
+ command.setTopOrganizationId(String.valueOf(loginUser.getUserPo().getTopOrganizationId()));
+ }
+ if (command.getOrganizationId() == null) {
+ command.setOrganizationId(String.valueOf(loginUser.getUserPo().getOrganizationId()));
+ }
+ if (command.getOrganizationName() == null) {
+ command.setOrganizationName(loginUser.getUserPo().getOrganizationName());
+ }
+ }
return R.ok(commandService.handle(command));
}
diff --git a/mhd_transport/src/main/resources/mapper/inventory/InventoryMapper.xml b/mhd_transport/src/main/resources/mapper/inventory/InventoryMapper.xml
index ad43e907e..f2073d406 100644
--- a/mhd_transport/src/main/resources/mapper/inventory/InventoryMapper.xml
+++ b/mhd_transport/src/main/resources/mapper/inventory/InventoryMapper.xml
@@ -47,6 +47,10 @@
material m ON i.material_id = m.id AND m.is_deleted = 0
WHERE
i.is_deleted = 0
+
+
+ AND m.organization_id = #{query.organizationId}
+
AND i.owner_id = #{query.ownerId}
@@ -101,6 +105,10 @@
LEFT JOIN
material m ON i.material_id = m.id AND m.is_deleted = 0
WHERE i.is_deleted = 0
+
+
+ AND m.organization_id = #{organizationId}
+
AND i.owner_id = #{ownerId}
diff --git a/mhd_transport/src/main/resources/mapper/vehicle/VehicleMapper.xml b/mhd_transport/src/main/resources/mapper/vehicle/VehicleMapper.xml
index efba73931..5afb7aee5 100644
--- a/mhd_transport/src/main/resources/mapper/vehicle/VehicleMapper.xml
+++ b/mhd_transport/src/main/resources/mapper/vehicle/VehicleMapper.xml
@@ -196,7 +196,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
and use_status = #{useStatus}
and organization_id = #{organizationId}
- and organization_id like concat('%', #{organizationName}, '%')
+ and organization_name like concat('%', #{organizationName}, '%')
and checkout_person_name like concat('%', #{checkoutPersonName}, '%')
AND checkout_date >= #{checkoutDateStart}