From c4409fac0044cc1efeda07b6a7709c3fde1aa9fe Mon Sep 17 00:00:00 2001
From: tuqin <tuqin@tuqin.cn>
Date: 星期六, 24 十月 2026 10:46:32 +0800
Subject: [PATCH] fix(仓储物流): ①出库新增临时跳过租户插件修复 SetOperationList 解析异常 ②库存预警查询补 warningLevel/warningStatus/warningTime/expectedShortageTime/suggestionType/suggestionContent 字段 ③currentStock 别名
---
src/main/java/com/ruoyi/procurementrecord/pojo/CustomStorage.java | 23 +++++++++++
src/main/resources/mapper/CustomStorageWarningRecordMapper.xml | 8 +++
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java | 23 ++++++++---
src/main/java/com/ruoyi/common/handler/CustomTenantLineHandler.java | 10 +++++
4 files changed, 56 insertions(+), 8 deletions(-)
diff --git a/src/main/java/com/ruoyi/common/handler/CustomTenantLineHandler.java b/src/main/java/com/ruoyi/common/handler/CustomTenantLineHandler.java
index d1b6d54..f6b13da 100644
--- a/src/main/java/com/ruoyi/common/handler/CustomTenantLineHandler.java
+++ b/src/main/java/com/ruoyi/common/handler/CustomTenantLineHandler.java
@@ -26,8 +26,18 @@
}
}
+ /**
+ * 绾跨▼绾т复鏃跺拷鐣ュ紑鍏筹細鏌愪簺 insert 鍦烘櫙涓� jsqlparser 瑙f瀽浼氭姏
+ * ClassCastException: SetOperationList cannot be cast to PlainSelect锛�
+ * 鍙湪璇ョ嚎绋嬪唴涓存椂璺宠繃绉熸埛鎻掍欢锛坱enant_id 鐢� MybatisHandler 鑷姩濉厖淇濊瘉锛夈��
+ */
+ public static final ThreadLocal<Boolean> TEMP_IGNORE = new ThreadLocal<>();
+
@Override
public boolean ignoreTable(String tableName) {
+ if (Boolean.TRUE.equals(TEMP_IGNORE.get())) {
+ return true;
+ }
// 鎸囧畾涓嶉渶瑕佹坊鍔犺繃婊ゆ潯浠剁殑琛�
Set<String> ignoreTables = IgnoreTableConfig.IGNORE_TABLES;
return ignoreTables.contains(tableName);
diff --git a/src/main/java/com/ruoyi/procurementrecord/pojo/CustomStorage.java b/src/main/java/com/ruoyi/procurementrecord/pojo/CustomStorage.java
index 49f1f8b..ed008ac 100644
--- a/src/main/java/com/ruoyi/procurementrecord/pojo/CustomStorage.java
+++ b/src/main/java/com/ruoyi/procurementrecord/pojo/CustomStorage.java
@@ -42,6 +42,29 @@
@TableField(exist = false)
private String timeStr;
+ // ===== 搴撳瓨棰勮鐩稿叧灞曠ず瀛楁锛堟潵鑷� custom_storage_warning_record锛岄潪鏈〃瀛楁锛�=====
+ /** 褰撳墠搴撳瓨锛堥〉闈㈠垪 currentStock锛孲QL 閲岀敱 availableStock 鍒悕鑰屾潵锛� */
+ @TableField(exist = false)
+ private BigDecimal currentStock;
+ /** 棰勮绾у埆 */
+ @TableField(exist = false)
+ private String warningLevel;
+ /** 棰勮鐘舵�� */
+ @TableField(exist = false)
+ private String warningStatus;
+ /** 棰勮鏃堕棿 */
+ @TableField(exist = false)
+ private LocalDateTime warningTime;
+ /** 棰勮缂鸿揣鏃堕棿 */
+ @TableField(exist = false)
+ private LocalDateTime expectedShortageTime;
+ /** 寤鸿绫诲瀷 */
+ @TableField(exist = false)
+ private String suggestionType;
+ /** 寤鸿鍐呭 */
+ @TableField(exist = false)
+ private String suggestionContent;
+
/**
* 寰呭嚭搴撴暟閲�
*/
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java
index 897716f..0b60e7a 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.handler.CustomTenantLineHandler;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.procurementrecord.dto.ProcurementRecordOutAdd;
import com.ruoyi.procurementrecord.dto.ProcurementRecordOutPageDto;
@@ -81,13 +82,21 @@
.updateUser(Long.valueOf(procurementRecordOutAdd.getUserId()))
.updateTime(LocalDateTime.now());
ProcurementRecordOut saved = procurementRecordOut.build();
- this.save(saved);
- if (StringUtils.isNotEmpty(procurementRecordOutAdd.getRequisitionNum()) && saved.getId() != null) {
- ProcurementRecordOut upd = ProcurementRecordOut.builder()
- .id(saved.getId())
- .requisitionNum(new BigDecimal(procurementRecordOutAdd.getRequisitionNum()))
- .build();
- procurementRecordOutMapper.updateById(upd);
+ // 鍑哄簱鍐欏叆鏃朵复鏃惰烦杩囩鎴锋彃浠讹紝閬垮厤 jsqlparser 瑙f瀽寮傚父
+ // 锛圕lassCastException: SetOperationList cannot be cast to PlainSelect锛�
+ // tenant_id 鐢� MybatisHandler 鐨� strictInsertFill 鑷姩濉厖锛屼笉浼氫涪
+ CustomTenantLineHandler.TEMP_IGNORE.set(Boolean.TRUE);
+ try {
+ this.save(saved);
+ if (StringUtils.isNotEmpty(procurementRecordOutAdd.getRequisitionNum()) && saved.getId() != null) {
+ ProcurementRecordOut upd = ProcurementRecordOut.builder()
+ .id(saved.getId())
+ .requisitionNum(new BigDecimal(procurementRecordOutAdd.getRequisitionNum()))
+ .build();
+ procurementRecordOutMapper.updateById(upd);
+ }
+ } finally {
+ CustomTenantLineHandler.TEMP_IGNORE.remove();
}
return 0;
}
diff --git a/src/main/resources/mapper/CustomStorageWarningRecordMapper.xml b/src/main/resources/mapper/CustomStorageWarningRecordMapper.xml
index 6bfcb45..40d93b3 100644
--- a/src/main/resources/mapper/CustomStorageWarningRecordMapper.xml
+++ b/src/main/resources/mapper/CustomStorageWarningRecordMapper.xml
@@ -22,7 +22,13 @@
sum(t1.tax_inclusive_total_price) as totalPrice,
sum(t1.inbound_num) as inboundNum,
sum(t1.inbound_num) as inboundNum0,
- SUM(t1.inbound_num) - COALESCE(SUM(t2.inbound_num), 0) AS availableStock
+ SUM(t1.inbound_num) - COALESCE(SUM(t2.inbound_num), 0) AS currentStock,
+ ANY_VALUE(cswr.warning_level) AS warningLevel,
+ ANY_VALUE(cswr.warning_status) AS warningStatus,
+ ANY_VALUE(cswr.warning_time) AS warningTime,
+ ANY_VALUE(cswr.expectedShortageTime) AS expectedShortageTime,
+ ANY_VALUE(cswr.suggestion_type) AS suggestionType,
+ ANY_VALUE(cswr.suggestion_content) AS suggestionContent
from custom_storage t1
left join procurement_record_out t2 on t1.id = t2.procurement_record_storage_id and t2.type = 3
inner join custom_storage_warning_record cswr on t1.id = cswr.custom_storage_id
--
Gitblit v1.9.3