From 8d5c50656d81dc3eb04a841ecd259adebf99424a Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期三, 11 二月 2026 15:49:26 +0800
Subject: [PATCH] 搜索库存明细调整不查询删除物料

---
 rsf-admin/src/page/locItem/LocItemList.jsx                                                |   12 ++++++
 rsf-server/src/main/java/com/vincent/rsf/server/system/service/UserService.java           |    6 +++
 rsf-admin/src/config/MyDataProvider.js                                                    |    5 ++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java |   11 +++++
 rsf-server/src/main/java/com/vincent/rsf/server/system/controller/UserController.java     |    2 
 rsf-server/src/main/resources/mapper/manager/LocItemMapper.xml                            |    5 +-
 rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/UserServiceImpl.java  |   32 ++++++++++++++++
 7 files changed, 68 insertions(+), 5 deletions(-)

diff --git a/rsf-admin/src/config/MyDataProvider.js b/rsf-admin/src/config/MyDataProvider.js
index 897d7ab..1e13a53 100644
--- a/rsf-admin/src/config/MyDataProvider.js
+++ b/rsf-admin/src/config/MyDataProvider.js
@@ -37,7 +37,10 @@
 
   // get a list of records based on an array of ids
   getMany: async (resource, params) => {
-    // console.log("getMany", resource, params);
+
+    if (resource === "user") {
+      await new Promise((r) => setTimeout(r, 1000));
+    }
     const res = await request.post(resource + "/many/" + params.ids);
     const { code, msg, data } = res.data;
     if (code === 200) {
diff --git a/rsf-admin/src/page/locItem/LocItemList.jsx b/rsf-admin/src/page/locItem/LocItemList.jsx
index dda2fd0..008c672 100644
--- a/rsf-admin/src/page/locItem/LocItemList.jsx
+++ b/rsf-admin/src/page/locItem/LocItemList.jsx
@@ -56,8 +56,20 @@
     },
 }));
 
+const locUseStatusChoices = typeof localStorage !== 'undefined'
+    ? (JSON.parse(localStorage.getItem('sys_dicts') || '[]')).filter((d) => d.dictTypeCode === 'sys_loc_use_stas')
+    : [];
+
 const filters = [
     <SearchInput source="condition" alwaysOn />,
+    <AutocompleteInput
+        source="useStatus"
+        label="table.field.loc.useStatus"
+        choices={locUseStatusChoices}
+        optionText="label"
+        optionValue="value"
+        resettable
+    />,
     <NumberInput source="locId" label="table.field.locItem.locId" />,
     <TextInput source="locCode" label="table.field.locItem.locCode" />,
     <NumberInput source="matnrId" label="table.field.locItem.matnrId" />,
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java
index 2fb3cbe..ccbde80 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java
@@ -22,6 +22,7 @@
 import com.vincent.rsf.server.system.controller.BaseController;
 import com.vincent.rsf.server.manager.enums.LocStsType;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
@@ -42,8 +43,16 @@
     public R page(@RequestBody Map<String, Object> map) {
         BaseParam baseParam = buildParam(map, BaseParam.class);
         PageParam<LocItem, BaseParam> pageParam = new PageParam<>(baseParam, LocItem.class);
-
+        // 搴撲綅鐘舵�佺瓫閫夛細鍏宠仈 man_loc锛屼笉鑳戒綔涓� man_loc_item 瀛楁鍙備笌 buildWrapper
+        Object useStatus = map.get("useStatus");
+        if (pageParam.getWhere() != null && pageParam.getWhere().getMap() != null) {
+            pageParam.getWhere().getMap().remove("useStatus");
+        }
         QueryWrapper<LocItem> wrapper = pageParam.buildWrapper(true);
+        if (useStatus != null && StringUtils.isNotBlank(useStatus.toString())) {
+            String status = useStatus.toString().replace("'", "''");
+            wrapper.apply("EXISTS (SELECT 1 FROM man_loc ml WHERE ml.id = man_loc_item.loc_id AND ml.use_status = '" + status + "')");
+        }
         FieldsUtils.setFieldsFilters(wrapper, pageParam, LocItem.class);
 
         /**鎷兼帴鎵╁睍瀛楁*/
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/UserController.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/UserController.java
index 9f2f7fd..d5ef406 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/UserController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/UserController.java
@@ -60,7 +60,7 @@
     @PreAuthorize("hasAuthority('system:user:list')")
     @PostMapping({"/user/many/{ids}", "/users/many/{ids}"})
     public R many(@PathVariable Long[] ids) {
-        return R.ok().add(userService.listByIds(Arrays.asList(ids)));
+        return R.ok().add(userService.listByIdsCached(Arrays.asList(ids)));
     }
 
     @PreAuthorize("hasAuthority('system:user:list')")
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/UserService.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/UserService.java
index 9981a93..25dbaea 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/UserService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/UserService.java
@@ -7,8 +7,14 @@
 import com.vincent.rsf.server.common.domain.PageResult;
 import com.vincent.rsf.server.system.entity.User;
 
+import java.util.Collection;
+import java.util.List;
+
 public interface UserService extends IService<User> {
 
+    /** 鎸� ID 鎵归噺鏌ヨ鐢ㄦ埛锛堝甫鐭湡缂撳瓨锛屽噺杞诲垪琛ㄩ〉 createBy/updateBy 绛夊娆¤姹傚帇鍔涳級 */
+    List<User> listByIdsCached(Collection<Long> ids);
+
     PageResult<User> pageRel(PageParam<User, BaseParam> pageParam);
 
     User getByUsername(String username, Long tenantId);
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/UserServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/UserServiceImpl.java
index dea12b4..155e883 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/UserServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/UserServiceImpl.java
@@ -14,9 +14,16 @@
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
 
 @Service("userService")
 public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
+
+    /** 鎵归噺鏌ヨ缂撳瓨锛歬ey = 鎺掑簭鍚庣殑 ids 鎷兼帴锛寁alue = (杩囨湡鏃堕棿鎴�, 鐢ㄦ埛鍒楄〃)锛孴TL 5 鍒嗛挓 */
+    private static final long CACHE_TTL_MS = 5 * 60 * 1000L;
+    private static final ConcurrentHashMap<String, CacheEntry<List<User>>> USER_MANY_CACHE = new ConcurrentHashMap<>(64);
 
     @Resource
     private UserRoleService userRoleService;
@@ -70,4 +77,29 @@
         return baseMapper.selectByUsernameWithoutTenant(username,tenantId);
     }
 
+    @Override
+    public List<User> listByIdsCached(Collection<Long> ids) {
+        if (ids == null || ids.isEmpty()) {
+            return Collections.emptyList();
+        }
+        String key = ids.stream().sorted().map(Object::toString).collect(Collectors.joining(","));
+        long now = System.currentTimeMillis();
+        CacheEntry<List<User>> entry = USER_MANY_CACHE.get(key);
+        if (entry != null && entry.expireAt > now) {
+            return entry.data;
+        }
+        List<User> list = listByIds(ids);
+        USER_MANY_CACHE.put(key, new CacheEntry<>(now + CACHE_TTL_MS, list));
+        return list;
+    }
+
+    private static class CacheEntry<T> {
+        final long expireAt;
+        final T data;
+        CacheEntry(long expireAt, T data) {
+            this.expireAt = expireAt;
+            this.data = data;
+        }
+    }
+
 }
diff --git a/rsf-server/src/main/resources/mapper/manager/LocItemMapper.xml b/rsf-server/src/main/resources/mapper/manager/LocItemMapper.xml
index ff677fc..6db3133 100644
--- a/rsf-server/src/main/resources/mapper/manager/LocItemMapper.xml
+++ b/rsf-server/src/main/resources/mapper/manager/LocItemMapper.xml
@@ -44,8 +44,9 @@
             , GROUP_CONCAT(DISTINCT l.use_status ORDER BY l.use_status) AS locStatuses
         </if>
         FROM man_loc_item li
-        INNER JOIN man_loc l ON l.id = li.loc_id
-        WHERE li.matnr_id IN
+        INNER JOIN man_loc l ON l.id = li.loc_id AND (l.deleted = 0 OR l.deleted IS NULL)
+        WHERE li.deleted = 0
+        AND li.matnr_id IN
         <foreach collection="matnrIds" item="id" open="(" separator="," close=")">
             #{id}
         </foreach>

--
Gitblit v1.9.1