From 866601517e00f9f4ecf43855f28169c66b548412 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期五, 28 三月 2025 14:19:35 +0800
Subject: [PATCH] Merge branch 'devlop' of http://47.97.1.152:5880/r/wms-master into devlop

---
 rsf-admin/src/page/asnOrder/AsnOrderList.jsx                                                      |   76 ++++++++++++--
 rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx                                                     |  168 +++++++++++++++------------------
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java |    3 
 rsf-admin/vite.config.js                                                                          |    1 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java     |    1 
 rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java               |    4 
 rsf-server/src/main/java/com/vincent/rsf/server/system/utils/SerialRuleUtils.java                 |    9 +
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java               |   37 +++++++
 rsf-admin/src/page/basicInfo/loc/LocList.jsx                                                      |    1 
 9 files changed, 189 insertions(+), 111 deletions(-)

diff --git a/rsf-admin/src/page/asnOrder/AsnOrderList.jsx b/rsf-admin/src/page/asnOrder/AsnOrderList.jsx
index cd9fdb1..8862faa 100644
--- a/rsf-admin/src/page/asnOrder/AsnOrderList.jsx
+++ b/rsf-admin/src/page/asnOrder/AsnOrderList.jsx
@@ -15,6 +15,7 @@
   useRecordContext,
   useTranslate,
   useNotify,
+  useRefresh,
   useListContext,
   FunctionField,
   TextField,
@@ -47,7 +48,7 @@
 import ConstructionIcon from "@mui/icons-material/Construction";
 import FileDownloadIcon from '@mui/icons-material/FileDownload';
 import EditIcon from '@mui/icons-material/Edit';
-
+import request from '@/utils/request';
 
 
 const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
@@ -107,13 +108,6 @@
     navigate(`/asnOrderItem?asnId=${record.id}`);
   };
 
-
-  const inspection = () => { };
-
-  const print = () => {
-  };
-
-
   return (
     <Box display="flex">
       <List
@@ -132,9 +126,6 @@
         actions={(
           <TopToolbar>
 
-            <Button onClick={inspection} label={"toolbar.inspection"}>
-              <ConstructionIcon />
-            </Button>
             <FilterButton />
             <MyCreateButton onClick={() => { setCreateDialog(true); setmodalType(0) }} />
             <SelectColumnsButton preferenceKey='asnOrder' />
@@ -146,7 +137,7 @@
       >
         <StyledDatagrid
           preferenceKey='asnOrder'
-          bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
+          bulkActionButtons={<> <InspectionsButton /><BulkDeleteButton mutationMode={OPERATE_MODE} /></>}
           rowClick={(id, resource, record) => false}
           expand={(e) => <AsnOrderPanel key={Math.floor(Math.random() * 100)} />}
           expandSingle={true}
@@ -188,6 +179,7 @@
               label={'ra.action.edit'}
             >
             </Button> */}
+            <InspectionButton />
             <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
           </WrapperField>
         </StyledDatagrid>
@@ -227,3 +219,63 @@
     </Button>
   )
 }
+
+const InspectionButton = () => {
+  const record = useRecordContext();
+  const notify = useNotify();
+  const refresh = useRefresh();
+  const inspection = () => {
+    requestInspect([record])
+  };
+
+  const requestInspect = async (rows) => {
+    const { data: { code, data, msg } } = await request.post(`/asnOrder/inspect`, rows);
+
+    if (code === 200) {
+      notify(msg);
+      refresh()
+    } else {
+      notify(msg);
+    }
+  }
+
+
+  return (
+    <Button onClick={inspection} label={"toolbar.inspection"}>
+      <ConstructionIcon />
+    </Button>
+  )
+}
+
+const InspectionsButton = () => {
+  const { selectedIds, onUnselectItems, data } = useListContext();
+  const notify = useNotify();
+  const refresh = useRefresh();
+  const inspection = () => {
+    if (selectedIds.length === 0) {
+      notify('璇烽�夋嫨閫氱煡鍗�');
+      return;
+    } else {
+      const rows = data.filter((item) => selectedIds.includes(item.id))
+      requestInspect(rows)
+    }
+  };
+
+  const requestInspect = async (rows) => {
+    const { data: { code, data, msg } } = await request.post(`/asnOrder/inspect`, rows);
+
+    if (code === 200) {
+      notify(msg);
+      refresh()
+    } else {
+      notify(msg);
+    }
+  }
+
+
+  return (
+    <Button onClick={inspection} label={"toolbar.inspection"}>
+      <ConstructionIcon />
+    </Button>
+  )
+}
diff --git a/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx b/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx
index 36e5df2..5d1eeb6 100644
--- a/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx
+++ b/rsf-admin/src/page/asnOrder/AsnOrderPanel.jsx
@@ -1,5 +1,5 @@
 import React, { useState, useRef, useEffect, useMemo } from "react";
-import { Box, Card, CardContent, Grid, Typography, Tooltip, Paper, TableContainer, Table, TableBody, TableCell, TableHead, TableRow } from '@mui/material';
+import { Box, Card, CardContent, Grid, Typography, Button, TextField, Tooltip, Paper, TableContainer, Table, TableBody, TableCell, TableHead, TableRow } from '@mui/material';
 import {
     useTranslate,
     useRecordContext,
@@ -9,20 +9,24 @@
 import * as Common from '@/utils/common'
 import { styled } from "@mui/material/styles";
 import request from '@/utils/request';
+import debounce from 'lodash/debounce';
+import { DataGrid } from '@mui/x-data-grid';
 const AsnOrderPanel = () => {
     const record = useRecordContext();
     if (!record) return null;
     const translate = useTranslate();
     const notify = useNotify();
     const [rows, setRows] = useState([]);
+    const [maktx, setMaktx] = useState('');
     const asnId = record.id;
 
     useEffect(() => {
-        http();
-    }, [asnId]);
+        debouncedHttp({ maktx });
+    }, [asnId, maktx]);
 
-    const http = async () => {
-        const res = await request.post('/asnOrderItem/page', { asnId });
+
+    const http = async (parmas) => {
+        const res = await request.post('/asnOrderItem/page', { ...parmas, asnId });
         if (res?.data?.code === 200) {
             setRows(res.data.data.records)
         } else {
@@ -30,6 +34,7 @@
         }
     }
 
+    const debouncedHttp = useMemo(() => debounce(http, 300), []);
 
     const StyledTableRow = styled(TableRow)(({ theme }) => ({
         "& .MuiButtonBase-root.": {
@@ -49,130 +54,113 @@
 
     const columns = [
         {
-            id: 'asnId',
-            label: 'table.field.asnOrderItem.asnId',
-            minWidth: 100,
+            field: 'asnId',
+            headerName: translate('table.field.asnOrderItem.asnId')
         },
         {
-            id: 'asnCode',
-            label: 'table.field.asnOrderItem.asnCode',
-            minWidth: 100,
+            field: 'asnCode',
+            headerName: translate('table.field.asnOrderItem.asnCode')
         },
         {
-            id: 'poDetlId',
-            label: 'table.field.asnOrderItem.poDetlId',
-            minWidth: 100,
+            field: 'poDetlId',
+            headerName: translate('table.field.asnOrderItem.poDetlId')
         },
         {
-            id: 'poDetlCode',
-            label: 'table.field.asnOrderItem.poDetlCode',
-            minWidth: 100,
+            field: 'poDetlCode',
+            headerName: translate('table.field.asnOrderItem.poDetlCode')
         },
         {
-            id: 'matnrId',
-            label: 'table.field.asnOrderItem.matnrId',
-            minWidth: 100,
+            field: 'matnrId',
+            headerName: translate('table.field.asnOrderItem.matnrId')
         },
         {
-            id: 'maktx',
-            label: 'table.field.asnOrderItem.maktx',
-            minWidth: 100,
+            field: 'maktx',
+            headerName: translate('table.field.asnOrderItem.maktx')
         },
         {
-            id: 'anfme',
-            label: 'table.field.asnOrderItem.anfme',
-            minWidth: 100,
+            field: 'anfme',
+            headerName: translate('table.field.asnOrderItem.anfme')
         },
         {
-            id: 'stockUnit',
-            label: 'table.field.asnOrderItem.stockUnit',
-            minWidth: 100,
+            field: 'stockUnit',
+            headerName: translate('table.field.asnOrderItem.stockUnit')
         },
         {
-            id: 'purQty',
-            label: 'table.field.asnOrderItem.purQty',
-            minWidth: 100,
+            field: 'purQty',
+            headerName: translate('table.field.asnOrderItem.purQty')
         },
         {
-            id: 'purUnit',
-            label: 'table.field.asnOrderItem.purUnit',
-            minWidth: 100,
+            field: 'purUnit',
+            headerName: translate('table.field.asnOrderItem.purUnit')
         },
         {
-            id: 'qty',
-            label: 'table.field.asnOrderItem.qty',
-            minWidth: 100,
+            field: 'qty',
+            headerName: translate('table.field.asnOrderItem.qty')
         },
         {
-            id: 'splrCode',
-            label: 'table.field.asnOrderItem.splrCode',
-            minWidth: 100,
+            field: 'splrCode',
+            headerName: translate('table.field.asnOrderItem.splrCode')
         },
         {
-            id: 'splrName',
-            label: 'table.field.asnOrderItem.splrName',
-            minWidth: 100,
+            field: 'splrName',
+            headerName: translate('table.field.asnOrderItem.splrName')
         },
         {
-            id: 'qrcode',
-            label: 'table.field.asnOrderItem.qrcode',
-            minWidth: 100,
+            field: 'barcode',
+            headerName: translate('table.field.asnOrderItem.barcode')
         },
         {
-            id: 'barcode',
-            label: 'table.field.asnOrderItem.barcode',
-            minWidth: 100,
-        },
-        {
-            id: 'packName',
-            label: 'table.field.asnOrderItem.packName',
-            minWidth: 100,
+            field: 'packName',
+            headerName: translate('table.field.asnOrderItem.packName')
         }]
+
+    const [selectedRows, setSelectedRows] = useState([]);
+
+    const handleSelectionChange = (ids) => {
+        setSelectedRows(ids)
+
+    };
+    const maktxChange = (value) => {
+        setMaktx(value)
+    }
+
+    const wakbarcode = () => {
+
+    }
+
+    const wakprint = () => {
+
+    }
 
 
     return (
-
         <Box sx={{
             position: 'relative',
             padding: '5px 10px'
         }}>
-            <TableContainer component={Paper} >
-                <Table size="small" >
-                    <TableHead>
-                        <StyledTableRow key={'head'}>
-                            {columns.map((column, idx) => {
-                                const value = column.label;
-                                return (
-                                    <>
-                                        <StyledTableCell
-                                            key={column.id}
-                                            align={column.align || "left"}
-                                        // style={{ paddingLeft: idx === 0 && (depth * 16 + 16) }}
-                                        >
-                                            {column.format ? column.format(value) : translate(value)}
-                                        </StyledTableCell>
-                                    </>
-                                );
 
-                            })}
-                        </StyledTableRow>
-                    </TableHead>
+            <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: '4px', alignItems: 'center' }}>
+                <TextField value={maktx} onChange={(e) => maktxChange(e.target.value)} label="鎼滅储鐗╂枡" variant="outlined" sx={{ width: '300px' }} />
 
-                    <TableBody>
-                        {rows.map((row) => (
-                            <StyledTableRow key={row.id + Math.random()}>
-                                {columns.map((column) => (
-                                    <StyledTableCell key={column.id} >
-                                        {row[column.id]}
-                                    </StyledTableCell>
-                                ))}
-                            </StyledTableRow>
-                        ))}
+                <div style={{ display: 'flex', gap: '10px' }}>
+                    <Button variant="contained" onClick={wakbarcode}>鐢熸垚鏉$爜</Button>
+                    <Button variant="contained" onClick={wakprint}>鎵撳嵃</Button>
+                </div>
+            </div>
 
-                    </TableBody>
-                </Table>
-            </TableContainer>
-        </Box>
+
+            <DataGrid
+                size="small"
+                rows={rows}
+                columns={columns}
+                checkboxSelection
+                onRowSelectionModelChange={handleSelectionChange}
+                selectionModel={selectedRows}
+                disableColumnMenu={true}
+                disableColumnSorting
+                disableMultipleColumnsSorting
+            />
+        </Box >
 
     );
 };
diff --git a/rsf-admin/src/page/basicInfo/loc/LocList.jsx b/rsf-admin/src/page/basicInfo/loc/LocList.jsx
index b425f38..c6a9228 100644
--- a/rsf-admin/src/page/basicInfo/loc/LocList.jsx
+++ b/rsf-admin/src/page/basicInfo/loc/LocList.jsx
@@ -311,7 +311,6 @@
     const notify = useNotify();
     const refresh = useRefresh();
 
-
     const [createDialog, setCreateDialog] = useState(false);
 
     return (
diff --git a/rsf-admin/vite.config.js b/rsf-admin/vite.config.js
index ced449c..76153c8 100644
--- a/rsf-admin/vite.config.js
+++ b/rsf-admin/vite.config.js
@@ -15,6 +15,7 @@
     server: {
       port: 8122,
       host: '0.0.0.0',
+      open: true,
       // available in run dev
       proxy: {
         '/rsf-server': {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
index 991e021..a44caf1 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
@@ -9,6 +9,7 @@
 import com.vincent.rsf.server.manager.service.*;
 import com.vincent.rsf.server.system.constant.SerialRuleCode;
 import com.vincent.rsf.server.system.utils.SerialRuleUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
@@ -98,7 +99,10 @@
                 if (Objects.isNull(matnr)) {
                     throw new CoolException("鏁版嵁閿欒锛氬綋鍓嶇墿鏂欎笉瀛樺湪!!");
                 }
-//                //TODO barcode鐢熸垚绛栫暐
+                String trackCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_LABEL_CODE, item);
+                if (StringUtils.isBlank(trackCode)) {
+                    throw new CoolException("鍗曟嵁璺熻釜鐮佺敓鎴愬け璐ワ細璇锋鏌ャ�宻ys_asn_mantr_label銆嶆槸鍚﹂厤缃畬鎴愶紒锛�");
+                }
 //                String barcode = code + matnr.getCode();
                 orderItem.setAnfme(item.getAnfme())
                         .setAsnId(order.getId())
@@ -108,10 +112,11 @@
                         .setSplrCode(item.getSplrCode())
                         .setPoDetlId(item.getId())
                         .setPlatItemId(item.getPlatItemId())
-//                        .setBarcode(barcode)
+                        .setTrackCode(trackCode)
                         .setPoCode(purchase.getCode())
                         .setPurQty(item.getAnfme())
                         .setPurUnit(item.getUnit())
+                        .setMatnrCode(matnr.getCode())
                         .setMaktx(matnr.getName())
                         .setMatnrId(matnr.getId() + "");
                 orderItems.add(orderItem);
@@ -130,4 +135,32 @@
         });
     }
 
+
+    /**
+     * 鐢熸垚鐗╂枡鏍囩
+     */
+    @Scheduled(cron = "0 0/05 * * * ?  ")
+    @Transactional(rollbackFor = Exception.class)
+    public void generateMatnrLabel() {
+        List<AsnOrderItem> list = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>()
+                        .isNull(AsnOrderItem::getTrackCode)
+                .select(AsnOrderItem::getId));
+        if (Objects.isNull(list) || list.isEmpty()) {
+            return;
+        }
+        List<AsnOrderItem> items = new ArrayList<>();
+        list.forEach(item -> {
+            String trackCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_LABEL_CODE, item);
+            if (StringUtils.isBlank(trackCode)) {
+                throw new CoolException("鍗曟嵁璺熻釜鐮佺敓鎴愬け璐ワ細璇锋鏌ャ�宻ys_asn_mantr_label銆嶆槸鍚﹂厤缃畬鎴愶紒锛�");
+            }
+            item.setTrackCode(trackCode);
+            items.add(item);
+        });
+
+        if (!asnOrderItemService.updateBatchById(items)) {
+            throw new CoolException("鐢熸垚缂栫爜澶辫触锛侊紒");
+        }
+    }
+
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java
index 99cb110..917d504 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java
@@ -106,6 +106,9 @@
        //淇濆瓨鎵╁睍瀛楁
         ExtendFieldsUtils.saveFields(params);
         AsnOrderItem asnOrderItem = JSONObject.parseObject(JSONObject.toJSONString(params), AsnOrderItem.class);
+        if (StringUtils.isBlank(asnOrderItem.getTrackCode())) {
+            SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_LABEL_CODE, params);
+        }
         if (!this.saveOrUpdate(asnOrderItem)) {
             throw new CoolException("鏀惰揣閫氱煡鍗曟槑缁嗕繚瀛樺け璐ワ紒锛�");
         }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
index 27e33ef..ca6d9a9 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
@@ -108,7 +108,6 @@
             item.put("asnId", orders.getId());
             item.put("asnCode", orders.getCode());
             item.put("poCode", orders.getPoCode());
-
             if (!asnOrderItemService.fieldsSave(item)) {
                 throw new CoolException("鏄庣粏淇濆瓨澶辫触锛侊紒");
             }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java
index d5578a6..5c8fb89 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java
@@ -25,9 +25,9 @@
     public final static String SYS_RECEIPT_BATCH = "sys_receipt_batch";
 
     /**
-     * ASN鏍囩鐢熸垚瑙勫垯
+     * ASN鐗╂枡鏍囩鐢熸垚瑙勫垯
      */
-    public final static String SYS_LABEL_CODE = "sys_label_code";
+    public final static String SYS_LABEL_CODE = "sys_asn_mantr_label";
 
     /**
      * 璐ㄦ鍗曚笟鍔$被鍨�
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/utils/SerialRuleUtils.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/utils/SerialRuleUtils.java
index 4f37cc8..9e977d0 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/utils/SerialRuleUtils.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/utils/SerialRuleUtils.java
@@ -50,7 +50,7 @@
                 .list(new LambdaQueryWrapper<SerialRuleItem>()
                         .eq(SerialRuleItem::getRuleId, serialRule.getId())
                         .orderByAsc(SerialRuleItem::getSort));
-        if (Objects.isNull(ruleItems)) {
+        if (Objects.isNull(ruleItems) || ruleItems.isEmpty()) {
             throw new CoolException("缂栫爜瑙勫垯鏄庣粏涓虹┖锛侊紒");
         }
 
@@ -83,8 +83,11 @@
                 //鍒ゆ柇鏄惁璁剧疆鎴彇闀垮害鍜岃捣濮嬫埅鍙栦綅缃�
                 buffer.append(subStr(format, rule.getLenStr(), rule.getLen()));
             } else if (rule.getWkType().equals(SerialRuleType.WK_FEILD.wkType)) {
-                String subStr = subStr(objectToMap(obj).get(rule.getFeildValue()).toString(), rule.getLenStr(), rule.getLen());
-                buffer.append(subStr);
+                String subStr;
+                if (!Objects.isNull(objectToMap(obj).get(rule.getFeildValue()))) {
+                    subStr = subStr(objectToMap(obj).get(rule.getFeildValue()).toString(), rule.getLenStr(), rule.getLen());
+                    buffer.append(subStr);
+                }
             }
         });
 

--
Gitblit v1.9.1