From 9831ab22d6b82696229849e9935ec15d24c79092 Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期二, 03 二月 2026 17:51:59 +0800
Subject: [PATCH] bug1 barcode为空依旧查询报错提示出现报错,

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java |   22 ++++-
 rsf-admin/src/page/orders/outStock/OutStockPublic.jsx                                         |  159 +++++++++++++++++++++++++++++++++++----
 2 files changed, 157 insertions(+), 24 deletions(-)

diff --git a/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx b/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx
index a69ef1a..c8628e2 100644
--- a/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx
+++ b/rsf-admin/src/page/orders/outStock/OutStockPublic.jsx
@@ -73,6 +73,7 @@
     const gridRef = useGridApiRef();
     const [rows, setRows] = useState([]);
     const [fetchRows, setFetchRows] = useState([]);
+    const [isLoading, setIsLoading] = useState(false);
     const translate = useTranslate();
     const [rowSelectedIds, setRowSelectedIds] = useState([]);
     const [selectedMatnr, setSelectedMatnr] = useState([]);
@@ -82,29 +83,93 @@
     const [selectedValue, setSelectedValue] = useState({});
 
     useEffect(() => {
+        console.log('useEffect triggered - selectedMatnr:', selectedMatnr, 'fetchRows length:', fetchRows.length);
         if (selectedMatnr.length < 1) {
+            console.log('娌℃湁閫変腑鐗╂枡锛屾樉绀烘墍鏈夋暟鎹�');
             setRows(fetchRows)
         } else {
-            const mas = fetchRows.filter(item => selectedMatnr.includes(item.matnrCode));
+            console.log('杩囨护鏁版嵁锛岄�変腑鐨勭墿鏂欑紪鐮�:', selectedMatnr);
+            const mas = fetchRows.filter(item => {
+                const matnrCode = item.matnrCode || item.locItem?.matnrCode;
+                const included = selectedMatnr.includes(matnrCode);
+                console.log('鐗╂枡缂栫爜:', matnrCode, '鏄惁鍖呭惈:', included);
+                return included;
+            });
+            console.log('杩囨护鍚庣殑鏁版嵁:', mas);
             setRows(mas)
         }
-    }, [selectedMatnr])
+    }, [selectedMatnr, fetchRows])
 
 
     const ComfirmButton = () => {
         const { selectedIds, data } = useListContext();
-        const handleRowClick = () => {
-            console.log(selectedIds);
+        const handleRowClick = async () => {
+            console.log('selectedIds:', selectedIds);
+            console.log('data:', data);
+            console.log('fetchRows:', fetchRows);
+            console.log('isLoading:', isLoading);
+            
+            if (!selectedIds || selectedIds.length === 0) {
+                notify('璇峰厛閫夋嫨鐗╂枡');
+                return;
+            }
+            
+            if (!data || data.length === 0) {
+                notify('鏁版嵁鍔犺浇涓紝璇风◢鍊�');
+                return;
+            }
             
             const ids = data.filter(item => selectedIds.includes(item.id)).map(item => item.id);
             setRowSelectedIds(ids);
             const mas = data.filter(item => selectedIds.includes(item.id)).map(item => item.matnrCode);
+            console.log('selectedMatnr:', mas);
+            
+            // 妫�鏌ラ�変腑鐨勭墿鏂欐槸鍚﹀凡鍏ㄩ儴鍑哄簱
+            const selectedItems = data.filter(item => selectedIds.includes(item.id));
+            const allCompleted = selectedItems.every(item => {
+                const remaining = (item.anfme || 0) - (item.workQty || 0);
+                return remaining <= 0;
+            });
+            
+            if (allCompleted) {
+                notify('閫変腑鐨勭墿鏂欏凡鍏ㄩ儴鍑哄簱锛堝凡鍑烘暟閲� >= 璁″垝鍑哄簱鏁帮級锛屾病鏈夊彲鍑哄簱鐨勫簱瀛樻暟鎹�');
+                setSelectedMatnr(mas);
+                setRows([]);
+                return;
+            }
+            
             //璁剧疆搴撲綅淇℃伅绛涢�夋潯浠�
             setSelectedMatnr(mas);
+            
+            // 濡傛灉 fetchRows 杩樻病鏈夋暟鎹紝閲嶆柊鍔犺浇
+            if (!fetchRows || fetchRows.length === 0) {
+                console.log('fetchRows涓虹┖锛岄噸鏂板姞杞芥暟鎹�');
+                notify('姝e湪鍔犺浇搴撳瓨鏁版嵁...');
+                // 閲嶆柊鍔犺浇鏁版嵁锛実etWaveRule 浼氬湪鍔犺浇瀹屾垚鍚庤嚜鍔ㄥ鐞� selectedMatnr
+                await getWaveRule(formData);
+            } else {
+                // 濡傛灉 fetchRows 鏈夋暟鎹紝绔嬪嵆杩囨护鏄剧ず
+                const filteredRows = fetchRows.filter(item => {
+                    const matnrCode = item.matnrCode || item.locItem?.matnrCode;
+                    return mas.includes(matnrCode);
+                });
+                console.log('filteredRows:', filteredRows);
+                setRows(filteredRows);
+                
+                // 濡傛灉杩囨护鍚庢病鏈夋暟鎹紝鎻愮ず鐢ㄦ埛
+                if (filteredRows.length === 0) {
+                    notify('閫変腑鐨勭墿鏂欐病鏈夊彲鍑哄簱鐨勫簱瀛樻暟鎹紝鍙兘宸插叏閮ㄥ嚭搴撴垨搴撳瓨涓嶈冻');
+                }
+            }
         }
 
         return (
-            <Button label="toolbar.confirm" size="medium" onClick={handleRowClick} />
+            <Button 
+                label="toolbar.confirm" 
+                size="medium" 
+                onClick={handleRowClick}
+                disabled={isLoading}
+            />
         )
     };
 
@@ -135,27 +200,83 @@
     };
 
     useEffect(() => {
-        getWaveRule()
-    }, [open])
+        if (open && record?.id) {
+            // 閲嶇疆鐘舵�侊紝纭繚鏁版嵁鑳芥纭樉绀�
+            setSelectedMatnr([]);
+            setRows([]);
+            setFetchRows([]);
+            setIsLoading(false);
+            // 纭繚 formData 姝g‘鍒濆鍖�
+            const initialFormData = { orderId: record.id, waveId: DEFAULT_TYPE };
+            setFormData(initialFormData);
+            getWaveRule(initialFormData)
+        }
+    }, [open, record?.id])
 
-    const getWaveRule = async () => {
-        if (formData.waveId == null && formData.waveId == undefined) {
+    const getWaveRule = async (data = formData) => {
+        if (data.waveId == null || data.waveId == undefined) {
             return
         }
-        const { data: { code, data, msg } } = await request.post('/outStock/order/getOutTaskItems', { ...formData });
-        if (code === 200) {
-            // setRows(data)
-            setFetchRows(data)
-        } else {
-            notify(msg);
+        if (!data.orderId) {
+            return
+        }
+        setIsLoading(true);
+        try {
+            const { data: { code, data: responseData, msg } } = await request.post('/outStock/order/getOutTaskItems', { ...data });
+            if (code === 200) {
+                console.log('API杩斿洖鐨勬暟鎹�:', responseData);
+                // 澶勭悊杩斿洖鐨勬暟鎹紝纭繚鏁版嵁缁撴瀯姝g‘
+                const processedData = (responseData || []).map((item, index) => {
+                    // 濡傛灉鏁版嵁鏈� locItem 宓屽缁撴瀯锛岄渶瑕佸睍寮�
+                    if (item.locItem) {
+                        return {
+                            ...item.locItem,
+                            id: item.locItem.id || `temp_${index}`,
+                            siteNo: item.siteNo,
+                            staNos: item.staNos || [],
+                            sourceId: item.sourceId,
+                            source: item.source
+                        };
+                    }
+                    // 濡傛灉鏁版嵁宸茬粡鏄墎骞崇粨鏋勶紝鐩存帴杩斿洖
+                    return {
+                        ...item,
+                        id: item.id || `temp_${index}`
+                    };
+                });
+                console.log('澶勭悊鍚庣殑鏁版嵁:', processedData);
+                setFetchRows(processedData);
+                
+                // 濡傛灉杩斿洖鐨勬暟鎹负绌猴紝涓旂敤鎴峰凡閫変腑鐗╂枡锛屾彁绀哄師鍥�
+                if (processedData.length === 0 && selectedMatnr.length > 0) {
+                    notify('閫変腑鐨勭墿鏂欏凡鍏ㄩ儴鍑哄簱锛屾病鏈夊彲鍑哄簱鐨勫簱瀛樻暟鎹�');
+                } else if (processedData.length === 0) {
+                    notify('褰撳墠鍑哄簱鍗曟病鏈夊彲鍑哄簱鐨勫簱瀛樻暟鎹紝鍙兘鎵�鏈夌墿鏂欏凡鍏ㄩ儴鍑哄簱');
+                }
+                // useEffect 浼氳嚜鍔ㄦ牴鎹� selectedMatnr 鍜� fetchRows 鏉ヨ繃婊ゆ暟鎹�
+            } else {
+                notify(msg);
+            }
+        } catch (error) {
+            console.error('鑾峰彇搴撳瓨鏁版嵁澶辫触:', error);
+            notify('鑾峰彇搴撳瓨鏁版嵁澶辫触锛岃閲嶈瘯');
+        } finally {
+            setIsLoading(false);
         }
     }
 
     const handleChange = (value, name) => {
-        setFormData((prevData) => ({
-            ...prevData,
-            [name]: value
-        }));
+        setFormData((prevData) => {
+            const newData = {
+                ...prevData,
+                [name]: value
+            };
+            // 褰撶瓥鐣ユ敼鍙樻椂锛岄噸鏂拌幏鍙栨暟鎹�
+            if (name === 'waveId' && value && prevData.orderId) {
+                getWaveRule(newData);
+            }
+            return newData;
+        });
     };
 
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
index 1852771..f1a7ffb 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
@@ -478,16 +478,28 @@
             if (Objects.isNull(param) || StringUtils.isBlank(param.getLocCode())) {
                 continue;
             }
-            Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, param.getLocCode()).eq(Loc::getBarcode, param.getBarcode()));
+            // 淇锛氭瀯寤哄簱浣嶆煡璇㈡潯浠讹紝濡傛灉barcode涓虹┖锛屽彧鎸塴ocCode鏌ヨ
+            LambdaQueryWrapper<Loc> locQueryWrapper = new LambdaQueryWrapper<Loc>()
+                    .eq(Loc::getCode, param.getLocCode());
+            if (StringUtils.isNotBlank(param.getBarcode())) {
+                locQueryWrapper.eq(Loc::getBarcode, param.getBarcode());
+            }
+            Loc loc = locService.getOne(locQueryWrapper);
             if (!Objects.isNull(loc)) {
                 List<LocItem> locItems = new ArrayList<>();
                 LocItem locItem = locItemService.getById(param.getId());
 
-                WkOrderItem orderItem = outStockItemService.getOne(new LambdaQueryWrapper<WkOrderItem>()
+                // 淇锛氭瀯寤烘煡璇㈡潯浠讹紝鍏堟瀯寤哄熀纭�鏉′欢锛屽啀鏍规嵁鍊兼槸鍚︿负绌哄姩鎬佹坊鍔�
+                LambdaQueryWrapper<WkOrderItem> orderItemWrapper = new LambdaQueryWrapper<WkOrderItem>()
                         .eq(WkOrderItem::getOrderId, outId)
-                        .eq(StringUtils.isNotBlank(locItem.getBatch()), WkOrderItem::getSplrBatch, locItem.getBatch())
-                        .eq(StringUtils.isNotBlank(locItem.getFieldsIndex()), WkOrderItem::getFieldsIndex, locItem.getFieldsIndex())
-                        .eq(WkOrderItem::getMatnrId, locItem.getMatnrId()));
+                        .eq(WkOrderItem::getMatnrId, locItem.getMatnrId());
+                if (StringUtils.isNotBlank(locItem.getBatch())) {
+                    orderItemWrapper.eq(WkOrderItem::getSplrBatch, locItem.getBatch());
+                }
+                if (StringUtils.isNotBlank(locItem.getFieldsIndex())) {
+                    orderItemWrapper.eq(WkOrderItem::getFieldsIndex, locItem.getFieldsIndex());
+                }
+                WkOrderItem orderItem = outStockItemService.getOne(orderItemWrapper);
 
                 if (Objects.isNull(orderItem)) {
                     throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�");

--
Gitblit v1.9.1