From 74698ac2f0eae4c93327fe761e91421f8d89e4a1 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期四, 24 七月 2025 10:31:24 +0800
Subject: [PATCH] 盘点功能优化

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java       |    9 +
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckOrderController.java       |   13 +--
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/CheckOrderService.java             |    7 -
 rsf-admin/src/page/orders/check/CheckOrderPub.jsx                                                  |    4 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CheckOrderServiceImpl.java    |   10 +-
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/CheckLocQueryParams.java |   23 +++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItem.java                        |    4 +
 rsf-admin/src/i18n/zh.js                                                                           |    4 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocItemService.java                |    3 
 rsf-admin/src/page/orders/check/CheckPreviewTable.jsx                                              |  125 ++++++++++++++++++++++++-------
 rsf-server/src/main/resources/mapper/manager/LocItemMapper.xml                                     |    4 +
 rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/LocItemMapper.java                  |    2 
 12 files changed, 154 insertions(+), 54 deletions(-)

diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js
index 8aaa64e..f6f6b23 100644
--- a/rsf-admin/src/i18n/zh.js
+++ b/rsf-admin/src/i18n/zh.js
@@ -222,7 +222,9 @@
             stockTransfer: {
                 orgLoc: '婧愬簱浣�',
                 tarLoc: '鐩爣搴撲綅',
-                inputLoc: '杈撳叆搴撲綅'
+                inputLoc: '杈撳叆搴撲綅',
+                inputChannel: '杈撳叆宸烽亾'
+
             },
             outBound: {
                 stockWithdrawal: '鎻愬彇搴撳瓨',
diff --git a/rsf-admin/src/page/orders/check/CheckOrderPub.jsx b/rsf-admin/src/page/orders/check/CheckOrderPub.jsx
index 1947840..56f341a 100644
--- a/rsf-admin/src/page/orders/check/CheckOrderPub.jsx
+++ b/rsf-admin/src/page/orders/check/CheckOrderPub.jsx
@@ -67,7 +67,8 @@
 
 
     const getLocs = async (ids) => {
-        const { data: { code, data, msg } } = await request.post('/check/locs/' + ids);
+        let params = {matnrCode: ids}
+        const { data: { code, data, msg } } = await request.post('/check/locs/',  params);
         if (code === 200) {
             setRows(data)
             const matnrs = selectedMatnr.filter(item => data.some(bigData => bigData.matnrCode === item));
@@ -213,6 +214,7 @@
                                     setRows={setRows}
                                     record={record}
                                     formData={formData}
+                                    selectedMatnr={selectedMatnr}
                                     selectedIds={selectedIds}
                                     setDialog={setDialog}
                                     setSelectedIds={setSelectedIds}
diff --git a/rsf-admin/src/page/orders/check/CheckPreviewTable.jsx b/rsf-admin/src/page/orders/check/CheckPreviewTable.jsx
index 3fee942..81f4b93 100644
--- a/rsf-admin/src/page/orders/check/CheckPreviewTable.jsx
+++ b/rsf-admin/src/page/orders/check/CheckPreviewTable.jsx
@@ -1,6 +1,8 @@
 
-import { Box, Card, Grid, LinearProgress, Select, MenuItem, ListItemText } from "@mui/material";
+import { Box, Card, Grid, LinearProgress, Select, MenuItem, ListItemText, TextField } from "@mui/material";
 import React, { useState, useRef, useEffect, useMemo } from "react";
+import QueryStatsIcon from '@mui/icons-material/QueryStats';
+import request from '@/utils/request';
 import { DataGrid, useGridApiContext, GridActionsCellItem, useGridApiRef } from '@mui/x-data-grid';
 import {
     List,
@@ -19,7 +21,7 @@
 } from 'react-admin';
 
 const CheckPreviewTable = (props) => {
-    const { rows, gridRef, setRows, record, selectedIds, setSelectedIds, setDialog, formData } = props;
+    const { rows, gridRef, setRows, record, selectedIds, setSelectedIds, selectedMatnr, setDialog, formData } = props;
     // const translate = useTranslate();
     // const refresh = useRefresh();
     // const notify = useNotify();
@@ -113,25 +115,86 @@
     });
 
     const CustomToolBar = () => {
+        const [queryParams, setQueryParams] = useState({ locCode: null, channel: null, matnrCode: selectedMatnr });
+        const notify = useNotify();
+        const queryClick = async () => {
+            console.log(queryParams);
+            console.log(rows);
+            const { data: { code, data, msg } } = await request.post('/check/locs/', queryParams);
+            if (code === 200) {
+                setRows(data)
+            } else {
+                notify(msg);
+            }
+        }
+
+        const handleChange = (e) => {
+            const { name, value } = e.target;
+            setQueryParams(() => ({
+                ...queryParams,
+                [name]: value
+            }));
+
+        };
+
         const selectSiteNo = () => {
             setDialog(true)
         }
         return (
-            <Box sx={{
-                p: 1,
-                display: 'flex',
-                justifyContent: 'flex-end',
-                borderTop: '1px solid rgba(224, 224, 224, 1)'
-            }}>
-                <Button
-                    onClick={selectSiteNo}
-                    variant="outlined"
-                    label="toolbar.modiftySite"
-                    size="medium"
-                    sx={{ mr: 1 }} />
-            </Box>
+            <>
+                <Box sx={{
+                    p: 1,
+                    display: 'flex',
+                    justifyContent: 'space-between',
+                    borderTop: '1px solid rgba(224, 224, 224, 1)'
+                }}>
+                    <Box sx={{
+                        '& > :not(style)': { m: 1, width: '25ch' },
+                        display: 'flex',
+                    }}>
+                        <TextField
+                            label={translate("table.field.stockTransfer.inputLoc")}
+                            size="small"
+                            name="locCode"
+                            value={queryParams?.locCode}
+                            onChange={handleChange}
+                            sx={{ mr: 1 }} />
+
+                        <TextField
+                            label={translate("table.field.stockTransfer.inputChannel")}
+                            size="small"
+                            name="channel"
+                            value={queryParams?.channel}
+                            onChange={handleChange}
+                            sx={{ mr: 1 }} />
+
+                        <Box sx={{
+                            '& > :not(style)': { m: 1, width: '11ch' },
+                        }}>
+                            <Button variant="contained"
+                                size="medium"
+                                startIcon={<QueryStatsIcon />}
+                                label="toolbar.query"
+                                onClick={queryClick} />
+                        </Box>
+                    </Box>
+                    <Box sx={{
+                        '& > :not(style)': { m: 1, width: '13ch' },
+                    }}>
+                        <Button
+                            onClick={selectSiteNo}
+                            variant="outlined"
+                            label="toolbar.modiftySite"
+                            size="medium"
+                            sx={{ mr: 1 }} />
+                    </Box>
+                </Box>
+
+            </>
         );
     }
+
+
 
     const OutStockSite = (params) => {
         const { id, field, siteNo, row: { staNos } } = params;
@@ -184,20 +247,24 @@
     }
 
     return (
-        <DataGrid
-            storeKey={"locItemPreview"}
-            rows={rows}
-            columns={columns}
-            slots={{ toolbar: CustomToolBar }}
-            apiRef={gridRef}
-            checkboxSelection
-            disableRowSelectionOnClick
-            hideFooterPagination={true}  // 闅愯棌鍒嗛〉鎺т欢
-            hideFooter={false}
-            onRowSelectionModelChange={(ids) => {
-                setSelectedIds(ids)
-            }}
-        />
+        <Box sx={{ maxHeight: 780 }}>
+            <DataGrid
+                sx={{ maxHeight: 730 }}
+                storeKey={"locItemPreview"}
+                rows={rows}
+                columns={columns}
+                slots={{ toolbar: CustomToolBar }}
+                apiRef={gridRef}
+                checkboxSelection
+                disableRowSelectionOnClick
+                hideFooterPagination={true}  // 闅愯棌鍒嗛〉鎺т欢
+                hideFooter={false}
+                onRowSelectionModelChange={(ids) => {
+                    setSelectedIds(ids)
+                }}
+            />
+        </Box>
+
     )
 }
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckOrderController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckOrderController.java
index 941cabb..0890885 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckOrderController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckOrderController.java
@@ -11,10 +11,7 @@
 import com.vincent.rsf.server.common.domain.KeyValVo;
 import com.vincent.rsf.server.common.domain.PageParam;
 import com.vincent.rsf.server.common.utils.ExcelUtil;
-import com.vincent.rsf.server.manager.controller.params.AsnOrderAndItemsParams;
-import com.vincent.rsf.server.manager.controller.params.CheckOrderItemParams;
-import com.vincent.rsf.server.manager.controller.params.CheckOrderParams;
-import com.vincent.rsf.server.manager.controller.params.OrderOutTaskParam;
+import com.vincent.rsf.server.manager.controller.params.*;
 import com.vincent.rsf.server.manager.entity.WkOrder;
 import com.vincent.rsf.server.manager.entity.WkOrderItem;
 import com.vincent.rsf.server.manager.entity.excel.CheckOrderTemplate;
@@ -215,13 +212,13 @@
 
 
     @ApiOperation("鑾峰彇鍦ㄥ簱鐗╂枡鍒楄〃")
-    @PostMapping("/check/locs/{matnrs}")
+    @PostMapping("/check/locs")
     @PreAuthorize("hasAuthority('manager:check:list')")
-    public R getAllLocByMatnr(@PathVariable String[] matnrs) {
-        if (Objects.isNull(matnrs)) {
+    public R getAllLocByMatnr(@RequestBody CheckLocQueryParams params) {
+        if (Objects.isNull(params)) {
             return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
-        return checkOrderService.getAllLocByMatnr(Arrays.asList(matnrs));
+        return checkOrderService.getAllLocByMatnr(params);
     }
 
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/CheckLocQueryParams.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/CheckLocQueryParams.java
new file mode 100644
index 0000000..b2a2ce5
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/CheckLocQueryParams.java
@@ -0,0 +1,23 @@
+package com.vincent.rsf.server.manager.controller.params;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+@Data
+@Accessors
+@ApiModel(value = "CheckLocQueryParams", description ="鐩樼偣鍗曠墿鏂欐煡璇㈠弬鏁�" )
+public class CheckLocQueryParams {
+
+   @ApiModelProperty("鐗╂枡缂栫爜")
+   private List<String> matnrCode;
+
+   @ApiModelProperty("宸烽亾")
+   private String channel;
+
+   @ApiModelProperty("搴撲滑缂栫爜")
+   private String locCode;
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItem.java
index 15c1f36..b88a12b 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/LocItem.java
@@ -100,6 +100,10 @@
     @TableField(exist = false)
     private Double outQty;
 
+    @ApiModelProperty("宸烽亾")
+    @TableField(exist = false)
+    private Integer channel;
+
     /**
      * 鐗╂枡鍚嶇О
      */
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/LocItemMapper.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/LocItemMapper.java
index d48dbbd..574ebca 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/LocItemMapper.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/LocItemMapper.java
@@ -14,5 +14,5 @@
 @Repository
 public interface LocItemMapper extends BaseMapper<LocItem> {
 
-    List<LocItem> listByMatnr(@Param("type") String type, @Param(Constants.WRAPPER) LambdaQueryWrapper<LocItem> matnr);
+    List<LocItem> listByMatnr(@Param("type") String type, @Param("channel") String channel, @Param(Constants.WRAPPER) LambdaQueryWrapper<LocItem> matnr);
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/CheckOrderService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/CheckOrderService.java
index bdba839..046c20f 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/CheckOrderService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/CheckOrderService.java
@@ -2,10 +2,7 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.vincent.rsf.framework.common.R;
-import com.vincent.rsf.server.manager.controller.params.AsnOrderAndItemsParams;
-import com.vincent.rsf.server.manager.controller.params.CheckOrderItemParams;
-import com.vincent.rsf.server.manager.controller.params.CheckOrderParams;
-import com.vincent.rsf.server.manager.controller.params.OrderOutTaskParam;
+import com.vincent.rsf.server.manager.controller.params.*;
 import com.vincent.rsf.server.manager.entity.WkOrder;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -26,7 +23,7 @@
 
     R genCheckPreview(OrderOutTaskParam param);
 
-    R getAllLocByMatnr(List<String> matnrs);
+    R getAllLocByMatnr(CheckLocQueryParams matnrs);
 
     R genCheckOutTask(List<CheckOrderParams> checkParams, Long loginUserId);
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocItemService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocItemService.java
index dfed43a..544c3e2 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocItemService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocItemService.java
@@ -1,6 +1,7 @@
 package com.vincent.rsf.server.manager.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.vincent.rsf.server.manager.controller.params.CheckLocQueryParams;
 import com.vincent.rsf.server.manager.controller.params.LocToTaskParams;
 import com.vincent.rsf.server.manager.entity.LocItem;
 import com.vincent.rsf.server.manager.entity.Task;
@@ -13,5 +14,5 @@
 
     Task genMoveTask(LocToTaskParams map, Long loginUserId);
 
-    List<LocItem> listByMatnr(List<String> matnrs);
+    List<LocItem> listByMatnr(CheckLocQueryParams matnrs);
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CheckOrderServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CheckOrderServiceImpl.java
index 61c2a65..6b434a1 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CheckOrderServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/CheckOrderServiceImpl.java
@@ -8,10 +8,7 @@
 import com.vincent.rsf.framework.common.R;
 import com.vincent.rsf.framework.exception.CoolException;
 import com.vincent.rsf.server.common.utils.ExcelUtil;
-import com.vincent.rsf.server.manager.controller.params.AsnOrderAndItemsParams;
-import com.vincent.rsf.server.manager.controller.params.CheckOrderItemParams;
-import com.vincent.rsf.server.manager.controller.params.CheckOrderParams;
-import com.vincent.rsf.server.manager.controller.params.OrderOutTaskParam;
+import com.vincent.rsf.server.manager.controller.params.*;
 import com.vincent.rsf.server.manager.entity.*;
 import com.vincent.rsf.server.manager.entity.excel.CheckOrderTemplate;
 import com.vincent.rsf.server.manager.enums.*;
@@ -239,7 +236,10 @@
      * @version 1.0
      */
     @Override
-    public R getAllLocByMatnr(List<String> matnrs) {
+    public R getAllLocByMatnr(CheckLocQueryParams matnrs) {
+        if (Objects.isNull(matnrs.getMatnrCode()) && matnrs.getMatnrCode().isEmpty()) {
+            throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
         List<LocItem> locItems = locItemService.listByMatnr(matnrs);
         if (!locItems.isEmpty()) {
             List<Integer> list = Arrays.asList(TaskType.TASK_TYPE_CHECK_OUT.type, TaskType.TASK_TYPE_CHECK_IN.type);
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
index d31e992..58b8709 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
@@ -7,6 +7,7 @@
 import com.vincent.rsf.server.api.service.WcsService;
 import com.vincent.rsf.server.api.utils.LocUtils;
 import com.vincent.rsf.server.common.constant.Constants;
+import com.vincent.rsf.server.manager.controller.params.CheckLocQueryParams;
 import com.vincent.rsf.server.manager.controller.params.LocToTaskParams;
 import com.vincent.rsf.server.manager.entity.*;
 import com.vincent.rsf.server.manager.enums.*;
@@ -371,9 +372,11 @@
      * @version 1.0
      */
     @Override
-    public List<LocItem> listByMatnr(List<String> matnr) {
+    public List<LocItem> listByMatnr(CheckLocQueryParams matnr) {
         LambdaQueryWrapper<LocItem> wrapper = new LambdaQueryWrapper<LocItem>()
-                .in(!matnr.isEmpty(), LocItem::getMatnrCode, matnr);
-        return  this.baseMapper.listByMatnr(LocStsType.LOC_STS_TYPE_F.type, wrapper);
+                .eq(StringUtils.isNotBlank(matnr.getLocCode()), LocItem::getLocCode, matnr.getLocCode())
+//                .eq(StringUtils.isNotBlank(matnr.getChannel()), LocItem::getChannel, matnr.getChannel())
+                .in(!matnr.getMatnrCode().isEmpty(), LocItem::getMatnrCode, matnr.getMatnrCode());
+        return  this.baseMapper.listByMatnr(LocStsType.LOC_STS_TYPE_F.type, matnr.getChannel(), wrapper);
     }
 }
diff --git a/rsf-server/src/main/resources/mapper/manager/LocItemMapper.xml b/rsf-server/src/main/resources/mapper/manager/LocItemMapper.xml
index bc18949..316b06d 100644
--- a/rsf-server/src/main/resources/mapper/manager/LocItemMapper.xml
+++ b/rsf-server/src/main/resources/mapper/manager/LocItemMapper.xml
@@ -11,6 +11,7 @@
                     li.loc_id,
                     li.loc_code,
                     l.barcode,
+                    l.channel,
                     li.matnr_id,
                     li.matnr_code,
                     li.maktx,
@@ -22,6 +23,9 @@
                     man_loc_item li
                         INNER JOIN man_loc l ON l.id = li.loc_id
                     WHERE l.use_status = #{type}
+                    <if test="channel != null">
+                        AND l.channel = #{channel}
+                    </if>
                 GROUP BY
                     loc_id,
                     matnr_id,

--
Gitblit v1.9.1