From 4496b9019ba423dd1c51c719bcc0a5938d90fff9 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期二, 22 四月 2025 17:33:18 +0800
Subject: [PATCH] #修改优化  1. DO单明细编码优化  2. DO单明细新增优化  3. 出库单新增单据增加新单据功能

---
 rsf-admin/src/page/orders/delivery/DeliveryCreate.jsx                                          |    2 
 rsf-admin/src/page/orders/outStock/OutOrderItemCreate.jsx                                      |   72 ++---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryItemController.java |   11 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java     |    2 
 rsf-admin/src/page/orders/outStock/OutOrderItemEdit.jsx                                        |   36 +-
 /dev/null                                                                                      |  310 -------------------------
 rsf-admin/src/page/orders/outStock/OutOrderModal.jsx                                           |  167 +++++++++++++
 rsf-admin/src/page/orders/delivery/DeliveryItemList.jsx                                        |    7 
 rsf-admin/src/i18n/zh.js                                                                       |    2 
 rsf-admin/src/page/orders/outStock/OutOrderList.jsx                                            |   31 +
 rsf-admin/src/i18n/en.js                                                                       |    2 
 rsf-admin/src/page/orders/delivery/DeliveryItemCreate.jsx                                      |   60 +---
 rsf-admin/src/page/orders/delivery/DeliveryEdit.jsx                                            |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryController.java     |    9 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/DeliveryItem.java               |    3 
 15 files changed, 286 insertions(+), 430 deletions(-)

diff --git a/rsf-admin/src/i18n/en.js b/rsf-admin/src/i18n/en.js
index c248085..eb60a5f 100644
--- a/rsf-admin/src/i18n/en.js
+++ b/rsf-admin/src/i18n/en.js
@@ -939,7 +939,7 @@
         quality: "quality",
         complete: "complete",
         close: "close",
-        asnCreate: "asnCreate",
+        asnCreate: "Create By Order",
         createTask: "createTask",
         recover: "recover",
         order: 'Orders',
diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js
index 710f535..b0c673a 100644
--- a/rsf-admin/src/i18n/zh.js
+++ b/rsf-admin/src/i18n/zh.js
@@ -988,7 +988,7 @@
         quality: "璐ㄦ",
         complete: "瀹屾垚",
         close: "鍏抽棴",
-        asnCreate: "閫氳繃ASN鍒涘缓",
+        asnCreate: "閫氳繃鍗曟嵁鍒涘缓",
         createTask: "鐢熸垚浠诲姟",
         recover: "缁х画鏀惰揣",
     },
diff --git a/rsf-admin/src/page/orders/delivery/DeliveryCreate.jsx b/rsf-admin/src/page/orders/delivery/DeliveryCreate.jsx
index eb55fcb..6f78fbe 100644
--- a/rsf-admin/src/page/orders/delivery/DeliveryCreate.jsx
+++ b/rsf-admin/src/page/orders/delivery/DeliveryCreate.jsx
@@ -124,12 +124,10 @@
                                     <NumberInput
                                         label="table.field.delivery.qty"
                                         source="qty"
-                                        validate={required()}
                                     />
                                     <NumberInput
                                         label="table.field.delivery.workQty"
                                         source="workQty"
-                                        validate={required()}
                                     />
                                     <TextInput
                                         label="table.field.delivery.platCode"
diff --git a/rsf-admin/src/page/orders/delivery/DeliveryEdit.jsx b/rsf-admin/src/page/orders/delivery/DeliveryEdit.jsx
index 0f80dae..49867b9 100644
--- a/rsf-admin/src/page/orders/delivery/DeliveryEdit.jsx
+++ b/rsf-admin/src/page/orders/delivery/DeliveryEdit.jsx
@@ -111,12 +111,10 @@
                                 <NumberInput
                                     label="table.field.delivery.qty"
                                     source="qty"
-                                    validate={required()}
                                 />
                                 <NumberInput
                                     label="table.field.delivery.workQty"
                                     source="workQty"
-                                    validate={required()}
                                 />
                                 <TextInput
                                     label="table.field.delivery.platCode"
diff --git a/rsf-admin/src/page/orders/delivery/DeliveryItemCreate.jsx b/rsf-admin/src/page/orders/delivery/DeliveryItemCreate.jsx
index c9c4eb4..7d1c567 100644
--- a/rsf-admin/src/page/orders/delivery/DeliveryItemCreate.jsx
+++ b/rsf-admin/src/page/orders/delivery/DeliveryItemCreate.jsx
@@ -17,6 +17,7 @@
     useNotify,
     Form,
     useCreateController,
+    ReferenceField,
 } from 'react-admin';
 import {
     Dialog,
@@ -26,6 +27,7 @@
     Stack,
     Grid,
     Box,
+    TextField,
 } from '@mui/material';
 import DialogCloseButton from "../../components/DialogCloseButton";
 import StatusSelectInput from "../../components/StatusSelectInput";
@@ -55,6 +57,7 @@
     return (
         <>
             <CreateBase
+                resource="deliveryItem"
                 record={{}}
                 transform={(data) => {
                     return data;
@@ -84,99 +87,70 @@
                         </DialogTitle>
                         <DialogContent sx={{ mt: 2 }}>
                             <Grid container rowSpacing={2} columnSpacing={2}>
-                                <Grid item xs={6} display="flex" gap={1} sx={{display : "none"}}>
-                                    <NumberInput 
+                                <Grid item xs={6} display="flex" gap={1} sx={{ display: "none" }}>
+                                    <NumberInput
                                         label="table.field.deliveryItem.deliveryId"
                                         source="deliveryId"
                                         defaultValue={record?.id}
                                         readOnly
                                     />
                                 </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
+                                <Grid item xs={12} display="flex" gap={1}>
                                     <TextInput
                                         label="table.field.deliveryItem.platItemId"
                                         source="platItemId"
                                         parse={v => v}
                                     />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
                                     <TextInput
                                         label="table.field.deliveryItem.matnrCode"
                                         source="matnrCode"
                                         parse={v => v}
                                     />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
                                     <TextInput
                                         label="table.field.deliveryItem.matnrName"
                                         source="matnrName"
                                         parse={v => v}
                                     />
                                 </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <TextInput
-                                        label="table.field.deliveryItem.fieldsIndex"
-                                        source="fieldsIndex"
-                                        parse={v => v}
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
+                                <Grid item xs={12} display="flex" gap={1}>
                                     <TextInput
                                         label="table.field.deliveryItem.unit"
                                         source="unit"
                                         parse={v => v}
                                     />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
                                     <NumberInput
                                         label="table.field.deliveryItem.anfme"
                                         source="anfme"
                                         validate={required()}
                                     />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
                                     <NumberInput
                                         label="table.field.deliveryItem.qty"
                                         source="qty"
-                                        validate={required()}
                                     />
                                 </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <NumberInput
-                                        label="table.field.deliveryItem.nromQty"
-                                        source="nromQty"
-                                        validate={required()}
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
+                                <Grid item xs={12} display="flex" gap={1}>
                                     <NumberInput
                                         label="table.field.deliveryItem.printQty"
                                         source="printQty"
-                                        validate={required()}
                                     />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <TextInput
-                                        label="table.field.deliveryItem.splrName"
-                                        source="splrName"
-                                        parse={v => v}
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <TextInput
+                                    <ReferenceInput source="splrName" reference="companys" label="table.field.deliveryItem.splrName" queryOptions={{ type: 'supplier' }}>
+                                        <AutocompleteInput
+                                            label="table.field.deliveryItem.splrName"
+                                            optionText="name"
+                                            source="splrCode"
+                                        />
+                                    </ReferenceInput>
+                                    {/* <TextInput
                                         label="table.field.deliveryItem.splrCode"
                                         source="splrCode"
                                         parse={v => v}
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
+                                    /> */}
                                     <TextInput
                                         label="table.field.deliveryItem.splrBatch"
                                         source="splrBatch"
                                         parse={v => v}
                                     />
                                 </Grid>
-
                                 <Grid item xs={6} display="flex" gap={1}>
                                     <StatusSelectInput />
                                 </Grid>
diff --git a/rsf-admin/src/page/orders/delivery/DeliveryItemList.jsx b/rsf-admin/src/page/orders/delivery/DeliveryItemList.jsx
index 3cfd440..3116dd7 100644
--- a/rsf-admin/src/page/orders/delivery/DeliveryItemList.jsx
+++ b/rsf-admin/src/page/orders/delivery/DeliveryItemList.jsx
@@ -1,5 +1,5 @@
 import React, { useState, useRef, useEffect, useMemo, useCallback } from "react";
-import { useNavigate } from 'react-router-dom';
+import { useLocation, useNavigate } from 'react-router-dom';
 import {
     List,
     DatagridConfigurable,
@@ -97,6 +97,7 @@
     const [createDialog, setCreateDialog] = useState(false);
     const [drawerVal, setDrawerVal] = useState(false);
     const [editDialog, setEditDialog] = useState(false);
+    const location = useLocation();
     const [select, setSelect] = useState({});
     const { data: dicts, isPending, error } = useGetOne('delivery', { id: doId });
     return (
@@ -112,7 +113,7 @@
                     marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
                 }}
                 title={"menu.deliveryItem"}
-                empty={<EmptyData onClick={() => { setCreateDialog(true) }} />}
+                empty={false}
                 filters={filters}
                 filter={{deliveryId: doId}}
                 sort={{ field: "create_time", order: "desc" }}
@@ -158,7 +159,7 @@
                     <BooleanField source="statusBool" label="common.field.status" sortable={false} />
                     <TextField source="memo" label="common.field.memo" sortable={false} />
                     <WrapperField cellClassName="opt" label="common.field.opt">
-                        <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
+                        <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} redirect={location.pathname + '/' + doId} />
                     </WrapperField>
                 </StyledDatagrid>
             </List>
diff --git a/rsf-admin/src/page/orders/outStock/AsnOrderModal.jsx b/rsf-admin/src/page/orders/outStock/AsnOrderModal.jsx
deleted file mode 100644
index 6c2dc38..0000000
--- a/rsf-admin/src/page/orders/outStock/AsnOrderModal.jsx
+++ /dev/null
@@ -1,643 +0,0 @@
-import React, { useState, useRef, useEffect, useMemo } from "react";
-import {
-    CreateBase,
-    useTranslate,
-    TextInput,
-    NumberInput,
-    BooleanInput,
-    DateInput,
-    SaveButton,
-    SelectInput,
-    ReferenceInput,
-    ReferenceArrayInput,
-    AutocompleteInput,
-    Toolbar,
-    required,
-    useDataProvider,
-    useNotify,
-    Form,
-    useCreateController,
-    useListContext,
-    useRefresh,
-} from 'react-admin';
-import {
-    Dialog,
-    DialogActions,
-    DialogContent,
-    DialogTitle,
-    Stack,
-    Grid,
-    TextField,
-    Box,
-    Button,
-    Paper,
-    TableContainer,
-    Table,
-    TableHead,
-    TableBody,
-    TableRow,
-    TableCell,
-    Tooltip,
-    IconButton,
-    styled,
-    Select,
-    MenuItem
-
-
-} from '@mui/material';
-import DialogCloseButton from "../../components/DialogCloseButton";
-import StatusSelectInput from "../../components/StatusSelectInput";
-import ConfirmButton from "../../components/ConfirmButton";
-import AsnWareModal from "./AsnWareModal";
-import { useForm, Controller, useWatch, FormProvider, useFormContext } from "react-hook-form";
-import SaveIcon from '@mui/icons-material/Save';
-import request from '@/utils/request';
-import { Add, Edit, Delete } from '@mui/icons-material';
-import _, { set } from 'lodash';
-import { DataGrid, useGridApiRef } from '@mui/x-data-grid';
-import DictionarySelect from "../../components/DictionarySelect";
-import DictSelect from "../../components/DictSelect";
-import "./asnOrder.css";
-
-const AsnOrderModal = (props) => {
-    const { open, setOpen, asnId, billReload } = props;
-
-    const translate = useTranslate();
-    const notify = useNotify();
-    const refresh = useRefresh();
-    const [disabled, setDisabled] = useState(false)
-
-    const [createDialog, setCreateDialog] = useState(false);
-
-    const tableRef = useRef();
-
-    useEffect(() => {
-        if (open && asnId !== 0) {
-            requestGetHead()
-            requestGetBody()
-        }
-        setDisabled(false)
-    }, [open])
-
-    const handleClose = (event, reason) => {
-        if (reason !== "backdropClick") {
-            setOpen(false);
-            refresh();
-            setFormData({ type: '', wkType: '' })
-            setTableData([])
-        }
-    };
-
-    const [formData, setFormData] = useState({
-        type: '',
-        wkType: '',
-        poCode: '',
-        logisNo: '',
-        arrTime: ''
-    });
-
-    const [tabelData, setTableData] = useState([]);
-
-
-    const handleChange = (value, name) => {
-        setFormData((prevData) => ({
-            ...prevData,
-            [name]: value
-        }));
-        console.log(formData);
-    };
-
-    const resetData = () => {
-        setFormData({
-            type: '',
-            wkType: '',
-            poCode: '',
-            logisNo: '',
-            arrTime: ''
-        })
-        setTableData([])
-    }
-
-    const setFinally = () => {
-        const rows = tableRef.current.state.editRows;
-        for (const key in rows) {
-            const find = tabelData.find(item => item.matnrId === +key);
-            find.anfme = rows[key].anfme.value;
-        }
-        setTableData([...tabelData]);
-    }
-
-    const handleSubmit = async () => {
-        setFinally()
-        setDisabled(true)
-
-        if (asnId === 0) {
-            const parmas = {
-                "orders": formData,
-                "items": tabelData,
-            }
-
-            const res = await request.post(`/asnOrder/items/save`, parmas);
-            if (res?.data?.code === 200) {
-                setOpen(false);
-                refresh();
-                billReload?.current()
-                resetData()
-            } else {
-                notify(res.data.msg);
-            }
-        } else {
-            const parmas = {
-                "orders": formData,
-                "items": tabelData,
-            }
-            const res = await request.post(`/asnOrder/items/update`, parmas);
-            if (res?.data?.code === 200) {
-                setOpen(false);
-                refresh();
-                billReload?.current()
-                resetData()
-            } else {
-                notify(res.data.msg);
-            }
-        }
-        setDisabled(false)
-
-    };
-
-
-    const handleDelete = async () => {
-        const res = await request.post(`/asnOrder/remove/${asnId}`);
-        if (res?.data?.code === 200) {
-            setOpen(false);
-            refresh();
-        } else {
-            notify(res.data.msg);
-        }
-    };
-
-    const requestGetHead = async () => {
-        const res = await request.get(`/asnOrder/${asnId}`);
-        if (res?.data?.code === 200) {
-            setFormData(res.data.data)
-        } else {
-            notify(res.data.msg);
-        }       
-    }
-
-    const requestGetBody = async () => {
-        const res = await request.post(`/asnOrderItem/page`, { asnId });
-        if (res?.data?.code === 200) {
-            setTableData(res.data.data.records)
-        } else {
-            notify(res.data.msg);
-        }
-    }
-
-    const [selectedRows, setSelectedRows] = useState([]);
-
-
-
-    const handleDeleteItem = () => {
-        const newTableData = _.filter(tabelData, (item) => !selectedRows.includes(item.matnrId));
-        setTableData(newTableData);
-    }
-
-    return (
-        <>       
-            <Dialog
-                open={open}
-                onClose={handleClose}
-                aria-labelledby="form-dialog-title"
-                aria-hidden
-                fullWidth
-                disableRestoreFocus
-                maxWidth="lg"   // 'xs' | 'sm' | 'md' | 'lg' | 'xl'
-            >                
-                <DialogTitle id="form-dialog-title" sx={{
-                    position: 'sticky',
-                    top: 0,
-                    backgroundColor: 'background.paper',
-                    zIndex: 1000
-                }}>
-                    {translate('create.title')}
-                    <Box sx={{ position: 'absolute', top: 8, right: 8, zIndex: 1001 }}>
-                        <DialogCloseButton onClose={handleClose} />
-                    </Box>
-                </DialogTitle>
-                <DialogContent sx={{ mt: 2 }}>
-                    <Box sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
-                        <Form defaultValues={formData}>
-                            <Grid container spacing={2}>
-                                <Grid item md={3}>
-                                    <DictSelect
-                                        label={translate("table.field.asnOrder.type")}
-                                        value={formData.type}
-                                        onChange={(e) => handleChange(e.target.value, 'type')}
-                                        dictTypeCode="sys_order_type"
-                                        required
-                                    />
-                                </Grid>
-                                <Grid item md={3}>
-                                    <DictSelect
-                                        label={translate("table.field.asnOrder.wkType")}
-                                        value={formData.wkType}
-                                        onChange={(e) => handleChange(e.target.value, 'wkType')}
-                                        dictTypeCode="sys_business_type"
-                                        required
-                                    />
-                                </Grid>
-                                <Grid item md={3}>
-                                    <TextField
-                                        label={translate("table.field.asnOrder.poCode")}
-                                        value={formData.poCode}
-                                        onChange={(e) => handleChange(e.target.value, 'poCode')}
-                                    />
-                                </Grid>
-                                <Grid item md={3}>
-                                    <TextField
-                                        label={translate("table.field.asnOrder.logisNo")}
-                                        value={formData.logisNo}
-                                        onChange={(e) => handleChange(e.target.value, 'logisNo')}
-                                    />
-                                </Grid>
-
-                                <Grid item md={3}>
-                                    {/* <TextField
-                                        label={translate("table.field.asnOrder.arrTime")}
-                                        value={formData.arrTime}
-                                        onChange={(e) => handleChange(e.target.value, 'arrTime')}
-                                    /> */}
-                                    <DateInput
-                                        source="arrTime"
-                                        label="table.field.asnOrder.arrTime"
-                                        value={formData.arrTime}
-                                        onChange={(e) => handleChange(e.target.value, 'arrTime')}
-                                    />
-
-                                </Grid>
-                            </Grid>
-                        </Form>
-                    </Box>
-
-                    <Box sx={{ mt: 2 }}>
-                        <Stack direction="row" spacing={2}>
-                            <Button variant="contained" onClick={() => setCreateDialog(true)}>鏂板鐗╂枡</Button>
-                            {/* {asnId !== '' && <ConfirmButton label={'鍒犻櫎'} variant="outlined" color="error" onConfirm={handleDelete} />} */}
-                            <ConfirmButton label={'鍒犻櫎'} variant="outlined" color="error" onConfirm={handleDeleteItem} />
-                        </Stack>
-                    </Box>
-                    <Box sx={{ mt: 2 }}>
-                        <AsnOrderModalTable tabelData={tabelData} setTableData={setTableData} asnId={asnId} selectedRows={selectedRows} setSelectedRows={setSelectedRows} tableRef={tableRef}></AsnOrderModalTable>
-                    </Box>
-                </DialogContent>
-                <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}>
-                    <Toolbar sx={{ width: '100%', justifyContent: 'space-between' }}  >
-                        <Button disabled={disabled} onClick={handleSubmit} variant="contained" startIcon={<SaveIcon />}>
-                            {translate('toolbar.confirm')}
-                        </Button>
-                    </Toolbar>
-                </DialogActions>
-
-            </Dialog>
-
-            <AsnWareModal
-                open={createDialog}
-                setOpen={setCreateDialog}
-                data={tabelData}
-                setData={setTableData}
-            />
-        </>
-    )
-}
-
-export default AsnOrderModal;
-
-const SelectInputSplrNameEditCell = (params) => {
-    const [formData, setFormData] = useState([{}])
-    useEffect(() => {
-        getOptions();
-    }, []);
-    const getOptions = async () => {        
-        const parmas = {    
-            "type": "supplier"       
-        }
-        const {
-            data: { code, data, msg },
-        } = await request.post("companys/page",parmas);
-        if (code === 200) {
-            setFormData(data.records)
-            console.log(data.records)           
-        } else {
-            notify(msg);
-        }
-    }  
-  
-    return (
-        <Select
-        value={params.value}
-        onChange={(e) =>{
-            params.api.setEditCellValue({
-                id: params.id,
-                field: params.field,
-                value: e.target.value,
-              })
-              // 鎵惧埌閫変腑鐨勪緵搴斿晢璁板綍
-          const selectedSupplier = formData.find(supplier => supplier.name === e.target.value);
-          
-          // 濡傛灉鎵惧埌瀵瑰簲鐨勪緵搴斿晢璁板綍锛屽悓鏃舵洿鏂皊plrCode瀛楁
-          if (selectedSupplier) {
-            params.api.setEditCellValue({
-              id: params.id,
-              field: 'splrCode',
-              value: selectedSupplier.id,
-            });
-          }
-
-        }
-          
-        }
-        fullWidth
-       
-      >        
-          {formData.map(e => {
-            return(
-                <MenuItem value={e.name} children={e.name} key={e.id} />
-            );
-              
-          })}
-        
-      </Select>
-    );
-  };
-
-  const SelectInputSplrCodeEditCell = (params) => {
-    const [formData, setFormData] = useState([{}])
-    useEffect(() => {
-        getOptions();
-    }, []);
-    const getOptions = async () => {        
-        const parmas = {    
-            "type": "supplier"       
-        }
-        const {
-            data: { code, data, msg },
-        } = await request.post("companys/page",parmas);
-        if (code === 200) {
-            setFormData(data.records)
-            console.log(data.records)           
-        } else {
-            notify(msg);
-        }
-    }  
-  
-    return (
-        <Select
-        value={params.value}
-        onChange={(e) =>{
-            params.api.setEditCellValue({
-                id: params.id,
-                field: params.field,
-                value: e.target.value,
-              })
-              const selectedSupplier = formData.find(supplier => supplier.id === e.target.value);
-              
-              // 濡傛灉鎵惧埌瀵瑰簲鐨勪緵搴斿晢璁板綍锛屽悓鏃舵洿鏂皊plrCode瀛楁
-              if (selectedSupplier) {
-                params.api.setEditCellValue({
-                  id: params.id,
-                  field: 'splrName',
-                  value: selectedSupplier.name,
-                });
-              }
-        }
-          
-        }
-        fullWidth
-        
-      >        
-          {formData.map(e => {
-            return(
-                <MenuItem value={e.id} children={e.name} key={e.id} />
-            );
-              
-          })}
-        
-      </Select>
-    );
-  };
-
-
-
-
-const AsnOrderModalTable = ({ tabelData, setTableData, asnId, selectedRows, setSelectedRows, tableRef }) => {
-    const translate = useTranslate();
-    const notify = useNotify();
-
-    const [columns, setColumns] = useState([
-
-        {
-            field: 'maktx',
-            headerName: translate('table.field.asnOrderItem.maktx'),
-            width: 250,
-            editable: false,
-        },
-        {
-            field: 'matnrCode',
-            headerName: translate('table.field.asnOrderItem.matnrCode'),
-            width: 130,
-            editable: false,
-        },
-        {
-            field: 'anfme',
-            headerName: translate('table.field.asnOrderItem.anfme')+"*",
-            type: 'number',
-            minWidth: 100,
-            flex: 1,
-            editable: true,
-            valueFormatter: (val) => val < 0 ? 0 : val,
-            headerClassName: "custom",
-        },
-        {
-            field: 'splrCode',
-            headerName: translate('table.field.asnOrderItem.splrCode')+"*",
-            minWidth: 100,
-            flex: 1,
-            editable: true,
-            renderEditCell: (params) => (
-                <SelectInputSplrCodeEditCell {...params} />
-            ),
-            headerClassName: "custom",         
-        },
-        {
-            field: 'splrName',
-            headerName: translate('table.field.asnOrderItem.splrName')+"*",
-            minWidth: 100,
-            flex: 1,
-            editable: true,
-            renderEditCell: (params) => (
-                <SelectInputSplrNameEditCell {...params} />
-            ),
-            headerClassName: "custom",
-        },
-        // {
-        //     field: 'packName',
-        //     headerName: translate('table.field.asnOrderItem.packName'),
-        //     minWidth: 100,
-        //     flex: 1,
-        //     editable: true,
-        // },
-        // {
-        //     field: 'poDetlId',
-        //     headerName: translate('table.field.asnOrderItem.poDetlId'),
-        //     minWidth: 100,
-        //     flex: 1,
-        // },
-        {
-            field: 'poCode',
-            headerName: translate('table.field.asnOrderItem.poDetlCode')+"*",
-            minWidth: 100,
-            flex: 1,
-            editable: true,
-            headerClassName: "custom",
-        },
-
-        {
-            field: 'stockUnit',
-            headerName: translate('table.field.asnOrderItem.stockUnit'),
-            minWidth: 100,
-            flex: 1,
-            editable: false,
-        },
-        // {
-        //     field: 'purQty',
-        //     headerName: translate('table.field.asnOrderItem.purQty'),
-        //     minWidth: 100,
-        //     flex: 1,
-        //     editable: true,
-        // },
-        {
-            field: 'purUnit',
-            headerName: translate('table.field.asnOrderItem.purUnit'),
-            minWidth: 100,
-            flex: 1,
-            editable: false,
-        },
-
-
-
-    ])
-
-    const action = {
-        field: 'action',
-        headerName: '鎿嶄綔',
-        width: 70,
-        lockPosition: 'left',
-        renderCell: (params) => (
-            <Tooltip title="Delete">
-                <IconButton onClick={() => handleDelete(params.row)}>
-                    <Delete />
-                </IconButton>
-            </Tooltip>
-        ),
-
-    }
-
-    let cdata = useRef([]);
-
-
-    useEffect(() => {
-        getDynamicFields();
-    }, []);
-
-    useEffect(() => {
-        cdata.current = tabelData
-    }, [tabelData]);
-
-
-    const getDynamicFields = async () => {
-        const {
-            data: { code, data, msg },
-        } = await request.get("/fields/enable/list");
-        if (code === 200) {
-            const cols = data.map(el => ({
-                field: el.fields,
-                headerName: el.fieldsAlise,
-                minWidth: 100,
-                flex: 1,
-                editable: false
-            }))
-            setColumns([...columns, ...cols, action])
-        } else {
-            notify(msg);
-        }
-    }
-
-
-
-    const handleDelete = (row) => {
-        const newData = _.filter(cdata.current, (item) => item.matnrId !== row.matnrId);
-        setTableData(newData);
-    };
-
-
-    const processRowUpdate = (newRow, oldRow) => {
-        const rows = tabelData.map((r) =>
-            r.matnrId === newRow.matnrId ? { ...newRow } : r
-        )
-        setTableData(rows)
-        // setTableData((prevData) =>
-        //     prevData.map((r) =>
-        //         r.matnrId === newRow.matnrId ? { ...newRow } : r
-        //     )
-
-        // );
-
-        return newRow;
-    };
-
-
-
-    const handleSelectionChange = (ids) => {
-        setSelectedRows(ids)
-
-    };
-
-    tableRef.current = useGridApiRef();
-
-
-    return (
-        <div style={{ height: 400, width: '100%' }}>
-            <DataGrid
-                apiRef={tableRef}
-                rows={tabelData}
-                columns={columns}
-                disableRowSelectionOnClick
-                getRowId={(row) => row.matnrId}
-                disableColumnFilter
-                disableColumnSelector
-                disableColumnSorting
-                disableMultipleColumnsSorting
-                processRowUpdate={processRowUpdate}
-                initialState={{
-                    pagination: {
-                        paginationModel: {
-                            pageSize: 25,
-                        },
-                    },
-                }}
-                pageSizeOptions={[10, 25, 50, 100]}
-                editMode="row"
-                checkboxSelection
-                onRowSelectionModelChange={handleSelectionChange}
-                selectionModel={selectedRows}
-                sx={{
-                    '& .MuiDataGrid-cell input': {
-                        border: '1px solid #ccc'
-                    },
-                }}
-            />
-        </div>
-    );
-};
-
diff --git a/rsf-admin/src/page/orders/outStock/AsnOrderPanel.jsx b/rsf-admin/src/page/orders/outStock/AsnOrderPanel.jsx
deleted file mode 100644
index 4649e7f..0000000
--- a/rsf-admin/src/page/orders/outStock/AsnOrderPanel.jsx
+++ /dev/null
@@ -1,239 +0,0 @@
-import React, { useState, useRef, useEffect, useMemo } from "react";
-import { Box, Card, CardContent, Grid, Typography, Button, TextField, Tooltip, Paper, TableContainer, Table, TableBody, TableCell, TableHead, TableRow } from '@mui/material';
-import {
-    useTranslate,
-    useRecordContext,
-    useNotify,
-    useRefresh,
-    useListContext,
-} from 'react-admin';
-import PanelTypography from "../../components/PanelTypography";
-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';
-import PrintModal from './PrintModal';
-import PrintIcon from '@mui/icons-material/Print';
-const AsnOrderPanel = ({ billReload }) => {
-    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(() => {
-        debouncedHttp({ maktx });
-    }, [asnId, maktx]);
-
-    const http = async (parmas) => {
-        const res = await request.post('/asnOrderItem/page', { ...parmas, asnId });
-        if (res?.data?.code === 200) {
-            setRows(res.data.data.records)
-        } else {
-            notify(res.data.msg);
-        }
-    }
-
-
-    useEffect(() => {
-        billReload.current = http
-    }, []);
-
-
-    const debouncedHttp = useMemo(() => debounce(http, 300), []);
-
-    const columns = [
-        {
-            field: 'asnId',
-            headerName: translate('table.field.asnOrderItem.asnId')
-        },
-        {
-            field: 'asnCode',
-            headerName: translate('table.field.asnOrderItem.asnCode'),
-            width: 150,
-        },
-        // {
-        //     field: 'poDetlId',
-        //     headerName: translate('table.field.asnOrderItem.poDetlId')
-        // },
-        {
-            field: 'poCode',
-            headerName: translate('table.field.asnOrderItem.poDetlCode')
-        },
-        {
-            field: 'matnrCode',
-            headerName: translate('table.field.asnOrderItem.matnrCode'),
-            width: 150,
-        },
-        {
-            field: 'maktx',
-            headerName: translate('table.field.asnOrderItem.maktx'),
-            width: 200,
-        },
-        {
-            field: 'anfme',
-            headerName: translate('table.field.asnOrderItem.purQty')
-        },
-        {
-            field: 'stockUnit',
-            headerName: translate('table.field.asnOrderItem.stockUnit')
-        },
-        // {
-        //     field: 'purQty',
-        //     headerName: translate('table.field.asnOrderItem.purQty')
-        // },
-        {
-            field: 'purUnit',
-            headerName: translate('table.field.asnOrderItem.purUnit')
-        },
-        {
-            field: 'qty',
-            headerName: translate('table.field.asnOrderItem.qty')
-        },
-        {
-            field: 'splrBatch',
-            headerName: translate('table.field.asnOrderItem.splrBatch')
-        },
-        {
-            field: 'splrCode',
-            headerName: translate('table.field.asnOrderItem.splrCode')
-        },
-        {
-            field: 'splrName',
-            headerName: translate('table.field.asnOrderItem.splrName')
-        },
-        {
-            field: 'trackCode',
-            headerName: translate('table.field.asnOrderItem.barcode'),
-            width: 150
-        },
-        {
-            field: 'prodTime',
-            headerName: translate('table.field.asnOrderItem.prodTime')
-        },
-        {
-            field: 'packName',
-            headerName: translate('table.field.asnOrderItem.packName')
-        },
-        {
-            field: 'action',
-            headerName: '鎿嶄綔',
-            width: 70,
-            lockPosition: 'left',
-            renderCell: (params) => (
-                <PrintButton rows={[params.row.id]} />
-            ),
-
-        },]
-
-    const [selectedRows, setSelectedRows] = useState([]);
-
-    const handleSelectionChange = (ids) => {
-        setSelectedRows(ids)
-
-    };
-    const maktxChange = (value) => {
-        setMaktx(value)
-    }
-
-
-    return (
-        <Box sx={{
-            position: 'relative',
-            padding: '5px 10px'
-        }}>
-            <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: '4px', alignItems: 'center' }}>
-                <TextField value={maktx} onChange={(e) => maktxChange(e.target.value)} label="鎼滅储鐗╂枡" sx={{ width: '300px' }} size="small" />
-
-                <div style={{ display: 'flex', gap: '10px' }}>
-                    <PrintsButton rows={selectedRows} />
-                </div>
-            </div>
-
-
-            <DataGrid
-                sx={{ width: 'calc(100vw - 280px)' }}
-                size="small"
-                rows={rows}
-                columns={columns}
-                disableRowSelectionOnClick
-                checkboxSelection
-                onRowSelectionModelChange={handleSelectionChange}
-                selectionModel={selectedRows}
-                disableColumnMenu={true}
-                disableColumnSorting
-                disableMultipleColumnsSorting
-                columnHeaderHeight={40}
-                rowHeight={42}
-                initialState={{
-                    pagination: {
-                        paginationModel: {
-                            pageSize: 10,
-                        },
-                    },
-                }}
-                pageSizeOptions={[10, 25, 50]}
-            />
-        </Box >
-
-    );
-};
-
-export default AsnOrderPanel;
-
-const PrintsButton = ({ rows }) => {
-    const record = useRecordContext();
-    const { resource, selectedIds } = useListContext();
-    const notify = useNotify();
-    const refresh = useRefresh();
-    const translate = useTranslate();
-
-    const [createDialog, setCreateDialog] = useState(false);
-
-    const modalChange = () => {
-        if (rows?.length === 0) {
-            notify('璇烽�夋嫨鐗╂枡');
-            return;
-        } else {
-            setCreateDialog(true)
-        }
-
-    }
-
-    return (
-        <>
-            <Button size="small" color="secondary" onClick={modalChange} startIcon={<PrintIcon />}>{translate("toolbar.batchPrint")}</Button>
-
-            <PrintModal
-                open={createDialog}
-                setOpen={setCreateDialog}
-                rows={rows}
-            />
-        </>
-    )
-}
-
-const PrintButton = ({ rows }) => {
-    const record = useRecordContext();
-
-    const notify = useNotify();
-    const refresh = useRefresh();
-
-    const [createDialog, setCreateDialog] = useState(false);
-    const translate = useTranslate();
-
-    return (
-        <>
-            <Button size="small" color="secondary" onClick={() => setCreateDialog(true)} startIcon={<PrintIcon />}>{translate("toolbar.print")}</Button>
-
-            <PrintModal
-                open={createDialog}
-                setOpen={setCreateDialog}
-                rows={rows}
-            />
-        </>
-    )
-}
diff --git a/rsf-admin/src/page/orders/outStock/AsnWareModal.jsx b/rsf-admin/src/page/orders/outStock/AsnWareModal.jsx
deleted file mode 100644
index 8f3788b..0000000
--- a/rsf-admin/src/page/orders/outStock/AsnWareModal.jsx
+++ /dev/null
@@ -1,249 +0,0 @@
-import React, { useState, useEffect } from "react";
-import {
-    Dialog,
-    DialogActions,
-    DialogContent,
-    DialogTitle,
-    Stack,
-    Grid,
-    TextField,
-    Box,
-    Button,
-    Paper,
-    styled
-} from '@mui/material';
-import DialogCloseButton from "../../components/DialogCloseButton";
-import { useTranslate, useNotify, useRefresh } from 'react-admin';
-import request from '@/utils/request';
-import { DataGrid } from '@mui/x-data-grid';
-import SaveIcon from '@mui/icons-material/Save';
-import TreeSelectInput from "@/page/components/TreeSelectInput";
-const AsnWareModal = (props) => {
-    const { open, setOpen, data, setData } = props;
-
-    const translate = useTranslate();
-    const notify = useNotify();
-    const refresh = useRefresh();
-
-    const handleClose = (event, reason) => {
-        if (reason !== "backdropClick") {
-            setOpen(false);
-        }
-    };
-
-    const [formData, setFormData] = useState({});
-    const [tableData, setTableData] = useState([]);
-    const [dyFields, setDyFields] = useState([]);
-    const [selectedRows, setSelectedRows] = useState([]);
-
-    const handleChange = (e) => {
-        const { name, value } = e.target;
-        setFormData(() => ({
-            [name]: value
-        }));
-    };
-
-    const reset = () => {
-        setFormData({
-            name: '',
-            code: '',
-            groupId: 0
-        })
-    }
-
-    const handleSubmit = () => {
-        const hasarr = data.map(el => +el.matnrId)
-        const selectedData = selectedRows.filter(item => !hasarr.includes(item)).map(id => (tableData.find(row => row.id === id)));
-        const value = selectedData.map((el => {
-            const dynamicFields = dyFields.reduce((acc, item) => {
-                acc[item.fields] = el['extendFields']?.[item.fields] || '';
-                return acc;
-            }, {});
-            return {
-                matnrId: el.id,
-                maktx: el.name,
-                matnrCode: el.code,
-                stockUnit: el.stockUnit || '',
-                purUnit: el.purchaseUnit || '',
-                ...dynamicFields
-            }
-        }))
-        setData([...data, ...value]);
-        setOpen(false);
-        reset();
-    };
-
-    const getData = async () => {
-        const res = await request.post(`/matnr/page`, {
-            ...formData,
-            current: 1,
-            pageSize: 100,
-            orderBy: "create_time desc"
-        });
-        if (res?.data?.code === 200) {
-            setTableData(res.data.data.records);
-        } else {
-            notify(res.data.msg);
-        }
-    };
-
-    useEffect(() => {
-        getData();
-    }, [open]);
-
-    const handleSearch = () => {
-        getData()
-    };
-
-    return (
-        <Dialog
-            open={open}
-            onClose={handleClose}
-            aria-labelledby="form-dialog-title"
-            fullWidth
-            disableRestoreFocus
-            maxWidth="lg"
-        >
-            <DialogTitle id="form-dialog-title" sx={{
-                position: 'sticky',
-                top: 0,
-                backgroundColor: 'background.paper',
-                zIndex: 1000
-            }}>
-                閫夋嫨鐗╂枡
-                <Box sx={{ position: 'absolute', top: 8, right: 8, zIndex: 1001 }}>
-                    <DialogCloseButton onClose={handleClose} />
-                </Box>
-            </DialogTitle>
-            <DialogContent sx={{ mt: 2 }}>
-                <Box component="form" onSubmit={handleSubmit} sx={{ display: 'flex', flexDirection: 'column', gap: 3 }}>
-                    <Grid container spacing={2}>
-                        <Grid item md={4}>
-                            <TextField
-                                label={translate('table.field.matnr.name')}
-                                name="name"
-                                value={formData.name}
-                                onChange={handleChange}
-                                size="small"
-                            />
-                        </Grid>
-                        <Grid item md={4}>
-                            <TextField
-                                label={translate('table.field.matnr.code')}
-                                name="code"
-                                value={formData.code}
-                                onChange={handleChange}
-                                size="small"
-                            />
-                        </Grid>
-                        <Grid item md={4}>
-                            <TreeSelectInput
-                                label="table.field.matnr.groupId"
-                                value={formData.groupId}
-                                resource={'matnrGroup'}
-                                source="groupId"
-                                name="groupId"
-                                onChange={handleChange}
-                            />
-                        </Grid>
-                    </Grid>
-                </Box>
-                <Box sx={{ mt: 2 }}>
-                    <Stack direction="row" spacing={2}>
-                        <Button variant="contained" onClick={handleSearch}>鎼滅储</Button>
-                    </Stack>
-                </Box>
-                <Box sx={{ mt: 2, height: 400, width: '100%' }}>
-                    <AsnWareModalTable
-                        tableData={tableData}
-                        setTableData={setTableData}
-                        dyFields={dyFields}
-                        setDyFields={setDyFields}
-                        selectedRows={selectedRows}
-                        setSelectedRows={setSelectedRows}
-                    />
-                </Box>
-            </DialogContent>
-            <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}>
-                <Box sx={{ width: '100%', display: 'flex', justifyContent: 'space-between' }}>
-                    <Button onClick={handleSubmit} variant="contained" startIcon={<SaveIcon />}>
-                        {translate('toolbar.confirm')}
-                    </Button>
-                </Box>
-            </DialogActions>
-        </Dialog>
-    );
-};
-
-export default AsnWareModal;
-
-const AsnWareModalTable = ({ tableData, setTableData, selectedRows, setSelectedRows, dyFields, setDyFields }) => {
-    const translate = useTranslate();
-    const notify = useNotify();
-
-    const [columns, setColumns] = useState([
-        // { field: 'id', headerName: 'ID', width: 100 },
-        { field: 'name', headerName: translate('table.field.matnr.name'), width: 300 },
-        { field: 'code', headerName: translate('table.field.matnr.code'), width: 200 },
-        { field: 'groupId$', headerName: translate('table.field.matnr.groupId'), width: 100 },
-        { field: 'spec', headerName: translate('table.field.matnr.spec'), width: 100 },
-        { field: 'model', headerName: translate('table.field.matnr.model'), width: 100 },
-        { field: 'weight', headerName: translate('table.field.matnr.weight'), width: 100 },
-
-        { field: 'describle', headerName: translate('table.field.matnr.describle'), width: 100 },
-        { field: 'nromNum', headerName: translate('table.field.matnr.nromNum'), width: 100 },
-        { field: 'unit', headerName: translate('table.field.matnr.unit'), width: 100 },
-        { field: 'purchaseUnit', headerName: translate('table.field.matnr.purUnit'), width: 100 },
-        { field: 'stockUnit', headerName: translate('table.field.matnr.stockUnit'), width: 100 },
-        { field: 'stockLeval$', headerName: translate('table.field.matnr.stockLevel'), width: 100, sortable: false },
-    ])
-
-
-
-    const handleSelectionChange = (ids) => {
-        setSelectedRows(ids)
-
-    };
-
-    useEffect(() => {
-        getDynamicFields();
-    }, []);
-
-    const getDynamicFields = async () => {
-        const {
-            data: { code, data, msg },
-        } = await request.get("/fields/enable/list");
-        if (code === 200) {
-            const cols = data.map(el => ({
-                field: el.fields,
-                headerName: el.fieldsAlise,
-                minWidth: 100,
-                flex: 1,
-                editable: el.unique,
-                valueGetter: (value, row) => {
-                    return row.extendFields?.[el.fields] || '';
-                },
-            }))
-            setDyFields(data)
-            setColumns([...columns, ...cols])
-        } else {
-            notify(msg);
-        }
-    }
-
-    return (
-        <div style={{ height: 400, width: '100%' }}>
-            <DataGrid
-                size="small"
-                rows={tableData}
-                columns={columns}
-                checkboxSelection
-                onRowSelectionModelChange={handleSelectionChange}
-                selectionModel={selectedRows}
-                disableColumnMenu={true}
-                disableColumnSorting
-                disableMultipleColumnsSorting
-            />
-        </div>
-    );
-};
\ No newline at end of file
diff --git a/rsf-admin/src/page/orders/outStock/OutOrderItemCreate.jsx b/rsf-admin/src/page/orders/outStock/OutOrderItemCreate.jsx
index e9a378d..213cfde 100644
--- a/rsf-admin/src/page/orders/outStock/OutOrderItemCreate.jsx
+++ b/rsf-admin/src/page/orders/outStock/OutOrderItemCreate.jsx
@@ -53,7 +53,7 @@
     return (
         <>
             <CreateBase
-                resource="asnOrderItem"
+                resource="outStockItem"
                 record={{}}
                 transform={(data) => {
                     return data;
@@ -85,105 +85,99 @@
                             <Grid>
                                 <Grid item xs={6} display="flex" gap={2}>
                                     <NumberInput
-                                        label="table.field.asnOrderItem.asnId"
+                                        label="table.field.outStockItem.asnId"
                                         source="asnId"
                                         readOnly
                                         hidden
                                         defaultValue={record?.id}
                                     />
                                     <TextInput
-                                        label="table.field.asnOrderItem.asnCode"
+                                        label="table.field.outStockItem.asnCode"
                                         source="asnCode"
                                         readOnly
                                         defaultValue={record?.code}
                                         parse={v => v}
                                     />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={2}>
                                     <TextInput
-                                        label="table.field.asnOrderItem.poDetlId"
+                                        label="table.field.outStockItem.poDetlId"
                                         source="poDetlId"
-                                        parse={v => v}
-                                    />
-                                    <TextInput
-                                        label="table.field.asnOrderItem.poDetlCode"
-                                        source="poDetlCode"
-                                        parse={v => v}
-                                    />
-                                    <TextInput
-                                        label="table.field.asnOrderItem.matnrId"
-                                        source="matnrId"
                                         parse={v => v}
                                     />
                                 </Grid>
                                 <Grid item xs={6} display="flex" gap={1}>
                                     <TextInput
-                                        label="table.field.asnOrderItem.maktx"
+                                        label="table.field.outStockItem.matnrId"
+                                        source="matnrId"
+                                        parse={v => v}
+                                    />
+                                    <TextInput
+                                        label="table.field.outStockItem.maktx"
                                         source="maktx"
                                         parse={v => v}
                                     />
                                     <NumberInput
-                                        label="table.field.asnOrderItem.anfme"
+                                        label="table.field.outStockItem.anfme"
                                         source="anfme"
                                         validate={required()}
                                     />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
                                     <TextInput
-                                        label="table.field.asnOrderItem.stockUnit"
+                                        label="table.field.outStockItem.stockUnit"
                                         source="stockUnit"
                                         parse={v => v}
                                     />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
                                     <NumberInput
-                                        label="table.field.asnOrderItem.purQty"
+                                        label="table.field.outStockItem.purQty"
                                         source="purQty"
                                         validate={required()}
                                     />
                                     <TextInput
-                                        label="table.field.asnOrderItem.purUnit"
+                                        label="table.field.outStockItem.purUnit"
                                         source="purUnit"
                                         parse={v => v}
                                     />
-                                    <NumberInput
-                                        label="table.field.asnOrderItem.qty"
-                                        source="qty"
-                                    />
                                 </Grid>
                                 <Grid item xs={6} display="flex" gap={1}>
+                                    <NumberInput
+                                        label="table.field.outStockItem.qty"
+                                        source="qty"
+                                    />
                                     <TextInput
-                                        label="table.field.asnOrderItem.splrCode"
+                                        label="table.field.outStockItem.splrCode"
                                         source="splrCode"
                                         parse={v => v}
                                     />
                                     <TextInput
-                                        label="table.field.asnOrderItem.splrName"
+                                        label="table.field.outStockItem.splrName"
                                         source="splrName"
                                         parse={v => v}
                                     />
-                                    <TextInput
-                                        label="table.field.asnOrderItem.qrcode"
-                                        source="qrcode"
-                                        parse={v => v}
-                                    />
+
                                 </Grid>
                                 <Grid item xs={6} display="flex" gap={1}>
                                     <TextInput
-                                        label="table.field.asnOrderItem.barcode"
+                                        label="table.field.outStockItem.qrcode"
+                                        source="qrcode"
+                                        parse={v => v}
+                                    />
+                                    <TextInput
+                                        label="table.field.outStockItem.barcode"
                                         source="barcode"
                                         parse={v => v}
                                     />
                                     <TextInput
-                                        label="table.field.asnOrderItem.packName"
+                                        label="table.field.outStockItem.packName"
                                         source="packName"
                                         parse={v => v}
                                     />
                                 </Grid>
 
-                                <Grid item xs={6} display="flex" gap={1}>
+                                <Grid item xs={4} display="flex" gap={1}>
                                     <StatusSelectInput />
                                 </Grid>
-                                <Grid item xs={12} display="flex" gap={1}>
-                                    <Stack direction="column" spacing={1} width={'100%'}>
+                                <Grid item xs={4} display="flex" gap={1}>
+                                    <Stack direction="column" spacing={1}>
                                         <MemoInput />
                                     </Stack>
                                 </Grid>
diff --git a/rsf-admin/src/page/orders/outStock/OutOrderItemEdit.jsx b/rsf-admin/src/page/orders/outStock/OutOrderItemEdit.jsx
index 800b76b..28d2342 100644
--- a/rsf-admin/src/page/orders/outStock/OutOrderItemEdit.jsx
+++ b/rsf-admin/src/page/orders/outStock/OutOrderItemEdit.jsx
@@ -52,7 +52,7 @@
             setOpen(false);
         }
     };
-    const { data, isPending, } = useGetOne('asnOrderItem', { id: record?.id });
+    const { data, isPending, } = useGetOne('outStockItem', { id: record?.id });
     if (data == null || data == undefined) { return }
 
     return (
@@ -79,7 +79,7 @@
             <DialogContent sx={{ mt: 2 }}>
                 <EditBase
                     id={record?.id}
-                    resource="asnOrderItem"
+                    resource="outStockItem"
                     mutationMode={EDIT_MODE}
                     actions={<CustomerTopToolBar />}
                 >
@@ -93,83 +93,83 @@
                             <Grid item xs={24} md={14}>
                                 <Stack direction='row' gap={2}>
                                     <NumberInput
-                                        label="table.field.asnOrderItem.asnId"
+                                        label="table.field.outStockItem.asnId"
                                         source="asnId"
                                         readOnly
                                     />
                                     <TextInput
-                                        label="table.field.asnOrderItem.asnCode"
+                                        label="table.field.outStockItem.asnCode"
                                         source="asnCode"
                                         readOnly
                                         parse={v => v}
                                     />
                                     <TextInput
-                                        label="table.field.asnOrderItem.poDetlId"
+                                        label="table.field.outStockItem.poDetlId"
                                         source="poDetlId"
                                         parse={v => v}
                                     />
                                     <TextInput
-                                        label="table.field.asnOrderItem.poDetlCode"
+                                        label="table.field.outStockItem.poDetlCode"
                                         source="poDetlCode"
                                         parse={v => v}
                                     />
                                 </Stack>
                                 <Stack direction='row' gap={2}>
                                     <TextInput
-                                        label="table.field.asnOrderItem.matnrId"
+                                        label="table.field.outStockItem.matnrId"
                                         source="matnrId"
                                         parse={v => v}
                                     />
                                     <TextInput
-                                        label="table.field.asnOrderItem.maktx"
+                                        label="table.field.outStockItem.maktx"
                                         source="maktx"
                                         parse={v => v}
                                     />
                                     <NumberInput
-                                        label="table.field.asnOrderItem.anfme"
+                                        label="table.field.outStockItem.anfme"
                                         source="anfme"
                                         validate={required()}
                                     />
                                     <TextInput
-                                        label="table.field.asnOrderItem.stockUnit"
+                                        label="table.field.outStockItem.stockUnit"
                                         source="stockUnit"
                                         parse={v => v}
                                     />
                                 </Stack>
                                 <Stack direction='row' gap={2}>
                                     <NumberInput
-                                        label="table.field.asnOrderItem.purQty"
+                                        label="table.field.outStockItem.purQty"
                                         source="purQty"
                                         validate={required()}
                                     />
                                     <TextInput
-                                        label="table.field.asnOrderItem.purUnit"
+                                        label="table.field.outStockItem.purUnit"
                                         source="purUnit"
                                         parse={v => v}
                                     />
                                     <NumberInput
-                                        label="table.field.asnOrderItem.qty"
+                                        label="table.field.outStockItem.qty"
                                         source="qty"
                                         readOnly
                                     />
-                                    <ReferenceInput source="splrName" label="table.field.asnOrderItem.splrName" reference="companys" filter={{type: 'supplier'}}>
-                                        <AutocompleteInput optionText="name" label="table.field.asnOrderItem.splrName" />
+                                    <ReferenceInput source="splrName" label="table.field.outStockItem.splrName" reference="companys" filter={{type: 'supplier'}}>
+                                        <AutocompleteInput optionText="name" label="table.field.outStockItem.splrName" />
                                     </ReferenceInput>
                                 </Stack>
                                 <Stack direction='row' gap={2}>
                                     <TextInput
-                                        label="table.field.asnOrderItem.qrcode"
+                                        label="table.field.outStockItem.qrcode"
                                         source="qrcode"
                                         parse={v => v}
                                     />
                                     <TextInput
-                                        label="table.field.asnOrderItem.barcode"
+                                        label="table.field.outStockItem.barcode"
                                         source="trackCode"
                                         parse={v => v}
                                         readOnly
                                     />
                                     <TextInput
-                                        label="table.field.asnOrderItem.packName"
+                                        label="table.field.outStockItem.packName"
                                         source="packName"
                                         parse={v => v}
                                     />
diff --git a/rsf-admin/src/page/orders/outStock/OutOrderList.jsx b/rsf-admin/src/page/orders/outStock/OutOrderList.jsx
index f20cf78..489b6d2 100644
--- a/rsf-admin/src/page/orders/outStock/OutOrderList.jsx
+++ b/rsf-admin/src/page/orders/outStock/OutOrderList.jsx
@@ -39,7 +39,6 @@
 } from 'react-admin';
 import { Box, Typography, Card, Stack } from '@mui/material';
 import { styled } from '@mui/material/styles';
-import AsnOrderModal from "./AsnOrderModal";
 import EmptyData from "../../components/EmptyData";
 import MyCreateButton from "../../components/MyCreateButton";
 import MyExportButton from '../../components/MyExportButton';
@@ -54,6 +53,9 @@
 import DetailsIcon from '@mui/icons-material/Details';
 import CancelIcon from '@mui/icons-material/Cancel';
 import OutOrderCreate from "./OutOrderCreate";
+import AddIcon from '@mui/icons-material/Add';
+import OutOrderModal from "./OutOrderModal";
+
 const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
   '& .css-1vooibu-MuiSvgIcon-root': {
     height: '.9em'
@@ -136,6 +138,7 @@
         actions={(
           <TopToolbar>
             <FilterButton />
+            <CreateByOrderButton setCreateDialog={setCreateDialog}/>
             <MyCreateButton onClick={() => { setManualDialog(true) }} />
             <SelectColumnsButton preferenceKey='outStock' />
             <ImportButton value={'asnOrderItem'} />
@@ -175,17 +178,15 @@
           <TextField source="memo" label="common.field.memo" sortable={false} />
           <WrapperField cellClassName="opt" label="common.field.opt" >
             <EditButton label="toolbar.detail" icon={(<DetailsIcon />)}></EditButton>
-            <MyButton setCreateDialog={setCreateDialog} setmodalType={setmodalType} />
+            {/* <MyButton setCreateDialog={setCreateDialog} setmodalType={setmodalType} /> */}
             <CancelButton></CancelButton>
           </WrapperField>
         </StyledDatagrid>
       </List>
       <OutOrderCreate open={manualDialog} setOpen={setManualDialog} />
-      <AsnOrderModal
+      <OutOrderModal
         open={createDialog}
         setOpen={setCreateDialog}
-        asnId={modalType}
-        billReload={billReload}
       />
       <PageDrawer
         title='AsnOrder Detail'
@@ -205,7 +206,6 @@
     const id = record.id;
     setmodalType(id);
     setCreateDialog(true);
-
   };
   return (
     <Button
@@ -219,14 +219,29 @@
   )
 }
 
+const CreateByOrderButton = ({setCreateDialog}) => {
+  const record = useRecordContext();
+  const notify = useNotify();
+  const refresh = useRefresh();
+
+  const createByOrder = async (event) => {
+    event.stopPropagation();
+    setCreateDialog(true);
+  }
+
+  return (
+    <Button onClick={createByOrder} label={'toolbar.asnCreate'}> <AddIcon /> </Button>
+  )
+
+}
+
 const CancelButton = () => {
   const record = useRecordContext();
   const notify = useNotify();
   const refresh = useRefresh();
   console.log(record);
-  
+
   const cancelOrder = async () => {
-    console.log(event);
     const { data: { code, data, msg } } = await request.get(`/outStock/cancel/${record?.id}`);
     if (code === 200) {
       notify(msg);
diff --git a/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx b/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx
new file mode 100644
index 0000000..d793c99
--- /dev/null
+++ b/rsf-admin/src/page/orders/outStock/OutOrderModal.jsx
@@ -0,0 +1,167 @@
+import { Dialog, DialogActions, DialogContent, DialogTitle, Box } from "@mui/material";
+import React, { useState, useRef, useEffect, useMemo } from "react";
+import {
+    List,
+    DatagridConfigurable,
+    SearchInput,
+    TopToolbar,
+    Button,
+    SelectColumnsButton,
+    EditButton,
+    FilterButton,
+    CreateButton,
+    ExportButton,
+    BulkDeleteButton,
+    WrapperField,
+    Toolbar,
+    useRecordContext,
+    useTranslate,
+    useNotify,
+    useListContext,
+    FunctionField,
+    TextField,
+    NumberField,
+    DateField,
+    BooleanField,
+    ReferenceField,
+    TextInput,
+    DateTimeInput,
+    DateInput,
+    SelectInput,
+    NumberInput,
+    ReferenceInput,
+    ReferenceArrayInput,
+    AutocompleteInput,
+    DeleteButton,
+} from 'react-admin';
+import DialogCloseButton from "../../components/DialogCloseButton";
+import { styled } from '@mui/material/styles';
+import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
+const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
+    '& .css-1vooibu-MuiSvgIcon-root': {
+        height: '.9em'
+    },
+    '& .RaDatagrid-row': {
+        cursor: 'auto'
+    },
+    '& .column-name': {
+    },
+    '& .opt': {
+        width: 220
+    },
+    '& .wkType': {
+        width: 110
+    },
+    '& .status': {
+        width: 90
+    },
+}));
+const filters = [
+    <SearchInput source="condition" alwaysOn />,
+    <DateInput label='common.time.after' source="timeStart" />,
+    <DateInput label='common.time.before' source="timeEnd" />,
+    <TextInput source="code" label="table.field.delivery.code" />,
+    <TextInput source="platId" label="table.field.delivery.platId" />,
+    <TextInput source="type" label="table.field.delivery.type" />,
+    <TextInput source="wkType" label="table.field.delivery.wkType" />,
+    <TextInput source="source" label="table.field.delivery.source" />,
+    <SelectInput
+        label="common.field.status"
+        source="status"
+        choices={[
+            { id: '1', name: 'common.enums.statusTrue' },
+            { id: '0', name: 'common.enums.statusFalse' },
+        ]}
+        resettable
+    />,
+]
+
+const OutOrderModal = (props) => {
+    const { open, setOpen, record } = props;
+    const translate = useTranslate();
+    const [drawerVal, setDrawerVal] = useState(false);
+
+    const handleClose = (event, reason) => {
+        if (reason !== "backdropClick") {
+            setOpen(false);
+        }
+    };
+    return (
+        <Dialog
+            open={open}
+            onClose={handleClose}
+            aria-labelledby="form-dialog-title"
+            aria-hidden
+            fullWidth
+            disableRestoreFocus
+            maxWidth="lg"
+        >
+            <DialogTitle id="form-dialog-title" sx={{
+                position: 'sticky',
+                top: 0,
+                backgroundColor: 'background.paper',
+                zIndex: 1000
+            }}>
+                {translate('create.title')}
+                <Box sx={{ position: 'absolute', top: 8, right: 8, zIndex: 1001 }}>
+                    <DialogCloseButton onClose={handleClose} />
+                </Box>
+            </DialogTitle>
+            <DialogContent>
+                <List
+                    resource="deliveryItem"
+                    storeKey='selectDelivery'
+                    sx={{
+                        flexGrow: 1,
+                        transition: (theme) =>
+                            theme.transitions.create(['all'], {
+                                duration: theme.transitions.duration.enteringScreen,
+                            }),
+                        marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
+                    }}
+                    title={"menu.delivery"}
+                    empty={false}
+                    sort={{ field: "create_time", order: "desc" }}
+                    actions={(
+                        <TopToolbar>
+                            <></>
+                        </TopToolbar>
+                    )}
+                    perPage={DEFAULT_PAGE_SIZE}
+                >
+                    <StyledDatagrid
+                        preferenceKey='deliveryItem'
+                        bulkActionButtons={() => <></>}
+                        rowClick={(id, resource, record) => false}
+                        expand={false}
+                        expandSingle={true}
+                        omit={['id', 'createTime', 'createBy', 'memo', 'workQty', 'startTime', 'endTime', 'updateBy', 'createTime']}
+                    >
+                        <NumberField source="id" />
+                        <TextField source="matnrCode" label="table.field.deliveryItem.matnrCode" />
+                        <TextField source="matnrName" label="table.field.deliveryItem.matnrName" />
+                        <TextField source="unit" label="table.field.deliveryItem.unit" />
+                        <NumberField source="anfme" label="table.field.deliveryItem.anfme" />
+                        <TextField source="splrName" label="table.field.deliveryItem.splrName" />
+                        <TextField source="splrBatch" label="table.field.deliveryItem.splrBatch" />
+                        <TextField source="updateBy$" label="common.field.updateBy" />
+                        <DateField source="updateTime" label="common.field.updateTime" showTime />
+                        <TextField source="createBy$" label="common.field.createBy" />
+                        <DateField source="createTime" label="common.field.createTime" showTime />
+                        <BooleanField source="statusBool" label="common.field.status" sortable={false} />
+                        <TextField source="memo" label="common.field.memo" sortable={false} />
+                    </StyledDatagrid>
+                </List>
+            </DialogContent>
+            <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}>
+                {/* <Toolbar sx={{ width: '100%', justifyContent: 'space-between' }}  >
+                    <Button disabled={disabled} onClick={handleSubmit} variant="contained" startIcon={<SaveIcon />}>
+                        {translate('toolbar.confirm')}
+                    </Button>
+                </Toolbar> */}
+            </DialogActions>
+        </Dialog>
+    )
+}
+
+export default OutOrderModal;
diff --git a/rsf-admin/src/page/orders/outStock/PrintModal.jsx b/rsf-admin/src/page/orders/outStock/PrintModal.jsx
deleted file mode 100644
index 2ad47fd..0000000
--- a/rsf-admin/src/page/orders/outStock/PrintModal.jsx
+++ /dev/null
@@ -1,310 +0,0 @@
-import React, { useState, useRef, useEffect, useMemo } from "react";
-import {
-    CreateBase,
-    useTranslate,
-    TextInput,
-    NumberInput,
-    BooleanInput,
-    DateInput,
-    SaveButton,
-    SelectInput,
-    ReferenceInput,
-    ReferenceArrayInput,
-    AutocompleteInput,
-    Toolbar,
-    required,
-    useDataProvider,
-    useNotify,
-    Form,
-    useCreateController,
-    useListContext,
-    useRefresh,
-} from 'react-admin';
-import {
-    Dialog,
-    DialogActions,
-    DialogContent,
-    DialogTitle,
-    Grid,
-    TextField,
-    Box,
-    Button,
-    Radio,
-    RadioGroup,
-    FormControlLabel,
-    FormControl,
-    FormLabel,
-    TableRow,
-    TableCell,
-    Tooltip,
-    IconButton,
-    styled
-
-
-} from '@mui/material';
-import DialogCloseButton from "@/page/components/DialogCloseButton";
-import DictionarySelect from "@/page/components/DictionarySelect";
-import { useForm, Controller, useWatch, FormProvider, useFormContext } from "react-hook-form";
-import SaveIcon from '@mui/icons-material/Save';
-import request from '@/utils/request';
-import { Add, Edit, Delete } from '@mui/icons-material';
-import _ from 'lodash';
-import { DataGrid } from '@mui/x-data-grid';
-import StatusSelectInput from "@/page/components/StatusSelectInput";
-
-import { useReactToPrint } from "react-to-print";
-import jsbarcode from 'jsbarcode'
-import { el } from "date-fns/locale";
-
-const PrintModal = ({ open, setOpen, rows }) => {
-    const refresh = useRefresh();
-    const translate = useTranslate();
-    const notify = useNotify();
-    const contentRef = useRef(null);
-    const reactToPrintFn = useReactToPrint({ contentRef });
-
-    const handleClose = (event, reason) => {
-        if (reason !== "backdropClick") {
-            setOpen(false);
-        }
-    };
-
-    const [value, setValue] = useState('temp1');
-
-    const handleChange = (event) => {
-        setValue(event.target.value);
-    };
-
-    const handlePrint = () => {
-        // handleClose()
-        reactToPrintFn()
-    };
-
-    return (
-        <Dialog open={open} maxWidth="sm" fullWidth>
-            <DialogCloseButton onClose={handleClose} />
-            <DialogTitle>{translate('toolbar.print')}</DialogTitle>
-            <DialogContent >
-                <FormControl >
-                    <RadioGroup
-                        row
-                        aria-labelledby="demo-controlled-radio-buttons-group"
-                        name="controlled-radio-buttons-group"
-                        value={value}
-                        onChange={handleChange}
-                        size="small"
-                        sx={{ justifyContent: 'center' }}
-                    >
-                        <FormControlLabel value="temp1" control={<Radio />} label="妯℃澘1" size="small" />
-                    </RadioGroup>
-                </FormControl>
-
-                <Box>
-                    <div style={{ textAlign: 'center', display: 'flex', justifyContent: 'center' }}>
-                        <table
-                            className="contain"
-                            style={{
-                                overflow: 'hidden',
-                                fontSize: 'small',
-                                tableLayout: 'fixed',
-                                width: '280px',
-                                borderCollapse: 'collapse', // 鍚堝苟杈规
-                                border: '1px solid black' // 璁剧疆琛ㄦ牸鏁翠綋杈规
-                            }}
-                        >
-                            <tbody>
-                                <tr style={{ height: '74px' }}>
-                                    <td
-                                        align="center"
-                                        colSpan={3}
-                                        style={{ border: '1px solid black' }} // 璁剧疆鍗曞厓鏍艰竟妗�
-                                    >
-                                        鍟嗗搧缂栫爜
-                                    </td>
-                                    <td
-                                        align="center"
-                                        className="barcode"
-                                        colSpan={9}
-                                        style={{ border: '1px solid black' }}
-                                    >
-                                        <img className="template-code" src={'/img/barcode.jpeg'} style={{ width: '90%' }} alt="Barcode" />
-                                        <div style={{ letterSpacing: '2px', marginTop: '1px', textAlign: 'center' }}>
-                                            <span>{'xxxxxx'}</span>
-                                        </div>
-                                    </td>
-                                </tr>
-                                <tr style={{ height: '74px' }}>
-                                    <td
-                                        align="center"
-                                        colSpan={3}
-                                        style={{ border: '1px solid black' }}
-                                    >
-                                        鍟嗗搧
-                                    </td>
-                                    <td
-                                        align="center"
-                                        colSpan={5}
-                                        style={{
-                                            overflow: 'hidden',
-                                            whiteSpace: 'nowrap',
-                                            textOverflow: 'ellipsis',
-                                            border: '1px solid black'
-                                        }}
-                                    >
-                                        {'xxxxxxxx'}
-                                    </td>
-                                    <td
-                                        align="center"
-                                        colSpan={2}
-                                        style={{ border: '1px solid black' }}
-                                    >
-                                        澶囨敞
-                                    </td>
-                                    <td
-                                        align="center"
-                                        colSpan={2}
-                                        style={{ border: '1px solid black' }}
-                                    >
-                                        {'xx'}
-                                    </td>
-                                </tr>
-                            </tbody>
-                        </table>
-                    </div>
-                    <style>{`
-                    @media print {
-                    .print-content {
-                            display: block!important;
-                        }
-                    }`} </style>
-                    <div ref={contentRef} className="print-content" style={{ textAlign: 'center', display: 'none' }}>
-                        <PrintTemp key={'bb'} rows={rows} />
-                    </div>
-                </Box>
-            </DialogContent>
-            <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}>
-                <Box sx={{ width: '100%', display: 'flex', justifyContent: 'space-between' }}>
-                    <Button onClick={handlePrint} variant="contained" startIcon={<SaveIcon />}>
-                        {translate('toolbar.confirm')}
-                    </Button>
-                </Box>
-            </DialogActions>
-        </Dialog >
-    );
-}
-
-export default PrintModal;
-
-const PrintTemp = ({ rows }) => {
-    const notify = useNotify();
-    const [data, setData] = useState([]);
-    const http = async () => {
-        const res = await request.post(`/asnOrderItem/many/${rows?.join()}`);
-        if (res?.data?.code === 200) {
-            let val = res.data.data.map((el => {
-                return {
-                    barcode: '/img/barcode.jpeg',
-                    code: el.trackCode,
-                    name: el.maktx,
-                    memo: el.memo || ''
-                }
-            }))
-            setData(val)
-            setTimeout(() => {
-                val.forEach((el) => {
-                    jsbarcode(`#barcode${el.code}`, el.code, { height: 30 });
-                });
-            }, 10);
-
-        } else {
-            notify(res.data.msg);
-        }
-    }
-
-    useEffect(() => {
-        if (rows?.length > 0) {
-            http();
-        }
-
-    }, [rows]);
-
-
-    return (
-        <>
-            {data.map((item, index) => (
-                <table
-                    key={index}
-                    className="contain"
-                    style={{
-                        overflow: 'hidden',
-                        fontSize: 'small',
-                        tableLayout: 'fixed',
-                        width: '520px',
-                        borderCollapse: 'collapse',
-                        borderSpacing: 0,
-                        margin: '0 auto',
-                        marginTop: '10px',
-                    }}
-                >
-                    <tbody>
-                        <tr style={{ height: '74px' }}>
-                            <td align="center" colSpan={3} style={{ border: '1px solid black' }} >
-                                鍟嗗搧缂栫爜
-                            </td>
-                            <td
-                                align="center"
-                                className="barcode"
-                                colSpan={9}
-                                style={{ border: '1px solid black' }}
-                            >
-                                <img id={"barcode" + item.code} style={{ width: '70%', verticalAlign: 'middle' }} />
-                                {/* <img className="template-code" src={item.barcode} style={{ width: '90%', verticalAlign: 'middle' }} alt="Barcode" /> */}
-                                {/* <div style={{ letterSpacing: '2px', marginTop: '1px', textAlign: 'center' }}>
-                                    <span>{item.code}</span>
-                                </div> */}
-                            </td>
-                        </tr>
-                        <tr style={{ height: '74px' }}>
-                            <td
-                                align="center"
-                                colSpan={3}
-                                style={{ border: '1px solid black' }}
-                            >
-                                鍟嗗搧
-                            </td>
-                            <td
-                                align="center"
-                                colSpan={5}
-                                style={{
-                                    overflow: 'hidden',
-                                    whiteSpace: 'nowrap',
-                                    textOverflow: 'ellipsis',
-                                    border: '1px solid black'
-                                }}
-                            >
-                                {item.name}
-                            </td>
-                            <td
-                                align="center"
-                                colSpan={2}
-                                style={{ border: '1px solid black' }}
-                            >
-                                澶囨敞
-                            </td>
-                            <td
-                                align="center"
-                                colSpan={2}
-                                style={{ border: '1px solid black' }}
-                            >
-                                {item.memo}
-                            </td>
-                        </tr>
-                    </tbody>
-                </table>
-            ))}
-
-        </>
-    )
-}
-
-
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryController.java
index 0df7a00..04abb82 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryController.java
@@ -10,6 +10,7 @@
 import com.vincent.rsf.server.common.domain.KeyValVo;
 import com.vincent.rsf.server.common.domain.PageParam;
 import com.vincent.rsf.server.manager.entity.Delivery;
+import com.vincent.rsf.server.manager.service.CompanysService;
 import com.vincent.rsf.server.manager.service.DeliveryService;
 import com.vincent.rsf.server.system.constant.SerialRuleCode;
 import com.vincent.rsf.server.system.controller.BaseController;
@@ -28,7 +29,6 @@
 
     @Autowired
     private DeliveryService deliveryService;
-
 
     @PreAuthorize("hasAuthority('manager:delivery:list')")
     @PostMapping("/delivery/page")
@@ -81,6 +81,13 @@
     public R update(@RequestBody Delivery delivery) {
         delivery.setUpdateBy(getLoginUserId());
         delivery.setUpdateTime(new Date());
+        if (Objects.isNull(delivery.getCode()) || StringUtils.isBlank(delivery.getCode())) {
+            String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_DELIVERY_RULE_CODE, delivery);
+            if (Objects.isNull(ruleCode) || StringUtils.isBlank(ruleCode)) {
+                return R.error("缂栫爜瑙勫垯閿欒锛氱紪鐮併�孲YS_DELIVERY_RULE_CODE銆嶆槸鏈缃垚鍔燂紒锛�");
+            }
+            delivery.setCode(ruleCode);
+        }
         if (!deliveryService.updateById(delivery)) {
             return R.error("Update Fail");
         }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryItemController.java
index d0ab07b..e4a9178 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryItemController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/DeliveryItemController.java
@@ -9,9 +9,12 @@
 import com.vincent.rsf.server.common.domain.BaseParam;
 import com.vincent.rsf.server.common.domain.KeyValVo;
 import com.vincent.rsf.server.common.domain.PageParam;
+import com.vincent.rsf.server.manager.entity.Companys;
 import com.vincent.rsf.server.manager.entity.DeliveryItem;
+import com.vincent.rsf.server.manager.service.CompanysService;
 import com.vincent.rsf.server.manager.service.DeliveryItemService;
 import com.vincent.rsf.server.system.controller.BaseController;
+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.*;
@@ -24,6 +27,10 @@
 
     @Autowired
     private DeliveryItemService deliveryItemService;
+
+
+    @Autowired
+    private CompanysService companysService;
 
     @PreAuthorize("hasAuthority('manager:deliveryItem:list')")
     @PostMapping("/deliveryItem/page")
@@ -59,6 +66,10 @@
         deliveryItem.setCreateTime(new Date());
         deliveryItem.setUpdateBy(getLoginUserId());
         deliveryItem.setUpdateTime(new Date());
+        if (StringUtils.isNotBlank(deliveryItem.getSplrName())) {
+            Companys companys = companysService.getById(deliveryItem.getSplrName());
+            deliveryItem.setSplrName(companys.getName()).setSplrCode(companys.getCode());
+        }
         if (!deliveryItemService.save(deliveryItem)) {
             return R.error("Save Fail");
         }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java
index d6642a3..b442995 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java
@@ -17,8 +17,6 @@
 import com.vincent.rsf.server.manager.entity.AsnOrderItem;
 import com.vincent.rsf.server.manager.entity.excel.AsnOrderTemplate;
 import com.vincent.rsf.server.manager.enums.AsnExceStatus;
-import com.vincent.rsf.server.manager.service.AsnOrderItemService;
-import com.vincent.rsf.server.manager.service.AsnOrderService;
 import com.vincent.rsf.server.manager.service.OutStockItemService;
 import com.vincent.rsf.server.manager.service.OutStockService;
 import com.vincent.rsf.server.system.constant.SerialRuleCode;
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/DeliveryItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/DeliveryItem.java
index 05b6fc6..d3148b5 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/DeliveryItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/DeliveryItem.java
@@ -3,6 +3,8 @@
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+
+import lombok.experimental.Accessors;
 import org.springframework.format.annotation.DateTimeFormat;
 import java.text.SimpleDateFormat;
 import java.util.Date;
@@ -22,6 +24,7 @@
 import java.util.Date;
 
 @Data
+@Accessors(chain = true)
 @TableName("man_delivery_item")
 public class DeliveryItem implements Serializable {
 

--
Gitblit v1.9.1