From 669fe984048785873c20fbd0ce8abb3cd52c1fce Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期二, 29 四月 2025 15:22:24 +0800
Subject: [PATCH] 新增出库单优化

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java     |   46 ++++++++++++--
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java              |    4 -
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OutStockService.java              |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OutStockController.java        |    4 
 rsf-admin/src/page/orders/outStock/SelectMatnrModal.jsx                                           |   40 ++++++------
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java         |    8 --
 rsf-admin/src/page/components/DictSelect.jsx                                                      |    3 
 /dev/null                                                                                         |   12 ----
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java |    7 +
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java     |    2 
 rsf-admin/src/i18n/zh.js                                                                          |    1 
 rsf-admin/src/i18n/en.js                                                                          |   34 +++++++++++
 rsf-admin/src/page/orders/outStock/MatnrInfoModal.jsx                                             |    8 +-
 13 files changed, 107 insertions(+), 64 deletions(-)

diff --git a/rsf-admin/src/i18n/en.js b/rsf-admin/src/i18n/en.js
index 596f515..c5127a8 100644
--- a/rsf-admin/src/i18n/en.js
+++ b/rsf-admin/src/i18n/en.js
@@ -533,6 +533,40 @@
                 ntyStatus: "Notify",
                 exceStatus: 'bill status'
             },
+            outStock: {
+                code: "Code",
+                poCode: "poCode",
+                poId: "doId",
+                type: "Type",
+                wkType: "wkType",
+                anfme: "anfme",
+                qty: "qty",
+                logisNo: "logisNo",
+                arrTime: "Arrived",
+                rleStatus: "Release",
+                ntyStatus: "Notify",
+                exceStatus: 'bill status'
+            },
+            outStockItem: {
+                asnId: "ID",
+                asnCode: "DO Code",
+                poDetlId: "poDetlId",
+                poDetlCode: "DO Detl Code",
+                matnrId: "matnrId",
+                maktx: "maktx",
+                anfme: "anfme",
+                stockUnit: "stockUnit",
+                purQty: "purQty",
+                purUnit: "purUnit",
+                qty: "qty",
+                splrCode: "splrCode",
+                splrName: "splrName",
+                qrcode: "qrcode",
+                barcode: "barcode",
+                packName: "packName",
+                ntyStatus: "ntyStatus",
+                platItemId: 'platItemId'
+            },
             asnOrderItem: {
                 asnId: "asnId",
                 asnCode: "asnCode",
diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js
index 0c681ce..c82f11d 100644
--- a/rsf-admin/src/i18n/zh.js
+++ b/rsf-admin/src/i18n/zh.js
@@ -583,6 +583,7 @@
                 asnId: "涓诲崟鏍囪瘑",
                 asnCode: "鍗曞彿",
                 poDetlId: "骞冲彴鏄庣粏ID",
+                poDetlCode: "DO鍗�",
                 matnrId: "鐗╂枡鏍囪瘑",
                 maktx: "鐗╂枡鍚嶇О",
                 matnrCode: "鐗╂枡缂栫爜",
diff --git a/rsf-admin/src/page/components/DictSelect.jsx b/rsf-admin/src/page/components/DictSelect.jsx
index d42a8ee..1ca14c5 100644
--- a/rsf-admin/src/page/components/DictSelect.jsx
+++ b/rsf-admin/src/page/components/DictSelect.jsx
@@ -1,6 +1,6 @@
 import { useState, useEffect } from 'react';
 import {
-    useTranslate, useNotify
+    useTranslate, useNotify, required
 } from 'react-admin';
 import request from '@/utils/request';
 import { Select, MenuItem, FormControl, InputLabel } from '@mui/material';
@@ -47,6 +47,7 @@
                 variant="filled"
                 onChange={handleChange}
                 size='small'
+
             >
                 {list.map((item) => (
                     <MenuItem key={item.value} value={item.value}>
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/AsnWareModal.jsx b/rsf-admin/src/page/orders/outStock/MatnrInfoModal.jsx
similarity index 98%
rename from rsf-admin/src/page/orders/outStock/AsnWareModal.jsx
rename to rsf-admin/src/page/orders/outStock/MatnrInfoModal.jsx
index 8f3788b..37a571f 100644
--- a/rsf-admin/src/page/orders/outStock/AsnWareModal.jsx
+++ b/rsf-admin/src/page/orders/outStock/MatnrInfoModal.jsx
@@ -18,7 +18,7 @@
 import { DataGrid } from '@mui/x-data-grid';
 import SaveIcon from '@mui/icons-material/Save';
 import TreeSelectInput from "@/page/components/TreeSelectInput";
-const AsnWareModal = (props) => {
+const MatnrInfoModal = (props) => {
     const { open, setOpen, data, setData } = props;
 
     const translate = useTranslate();
@@ -110,7 +110,7 @@
                 backgroundColor: 'background.paper',
                 zIndex: 1000
             }}>
-                閫夋嫨鐗╂枡
+                {translate("common.action.newAddMats")}
                 <Box sx={{ position: 'absolute', top: 8, right: 8, zIndex: 1001 }}>
                     <DialogCloseButton onClose={handleClose} />
                 </Box>
@@ -175,7 +175,7 @@
     );
 };
 
-export default AsnWareModal;
+export default MatnrInfoModal;
 
 const AsnWareModalTable = ({ tableData, setTableData, selectedRows, setSelectedRows, dyFields, setDyFields }) => {
     const translate = useTranslate();
@@ -189,7 +189,6 @@
         { 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 },
@@ -197,7 +196,6 @@
         { 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) => {
diff --git a/rsf-admin/src/page/orders/outStock/SelectMatnrModal.jsx b/rsf-admin/src/page/orders/outStock/SelectMatnrModal.jsx
index 7e0652b..9c9b9be 100644
--- a/rsf-admin/src/page/orders/outStock/SelectMatnrModal.jsx
+++ b/rsf-admin/src/page/orders/outStock/SelectMatnrModal.jsx
@@ -46,7 +46,7 @@
 import DialogCloseButton from "../../components/DialogCloseButton";
 import StatusSelectInput from "../../components/StatusSelectInput";
 import ConfirmButton from "../../components/ConfirmButton";
-import AsnWareModal from "./AsnWareModal";
+import MatnrInfoModal from "./MatnrInfoModal";
 import { useForm, Controller, useWatch, FormProvider, useFormContext } from "react-hook-form";
 import SaveIcon from '@mui/icons-material/Save';
 import request from '@/utils/request';
@@ -134,7 +134,7 @@
                 "items": tabelData,
             }
 
-            const res = await request.post(`/asnOrder/items/save`, parmas);
+            const res = await request.post(`/outStock/items/save`, parmas);
             if (res?.data?.code === 200) {
                 setOpen(false);
                 refresh();
@@ -148,7 +148,7 @@
                 "orders": formData,
                 "items": tabelData,
             }
-            const res = await request.post(`/asnOrder/items/update`, parmas);
+            const res = await request.post(`/outStock/items/update`, parmas);
             if (res?.data?.code === 200) {
                 setOpen(false);
                 refresh();
@@ -164,7 +164,7 @@
 
 
     const handleDelete = async () => {
-        const res = await request.post(`/asnOrder/remove/${asnId}`);
+        const res = await request.post(`/outStock/remove/${asnId}`);
         if (res?.data?.code === 200) {
             setOpen(false);
             refresh();
@@ -174,7 +174,7 @@
     };
 
     const requestGetHead = async () => {
-        const res = await request.get(`/asnOrder/${asnId}`);
+        const res = await request.get(`/outStock/${asnId}`);
         if (res?.data?.code === 200) {
             setFormData(res.data.data)
         } else {
@@ -183,7 +183,7 @@
     }
 
     const requestGetBody = async () => {
-        const res = await request.post(`/asnOrderItem/page`, { asnId });
+        const res = await request.post(`/outStockItem/page`, { asnId });
         if (res?.data?.code === 200) {
             setTableData(res.data.data.records)
         } else {
@@ -235,7 +235,7 @@
                                 </Grid> */}
                                 <Grid item md={2}>
                                     <DictSelect
-                                        label={translate("table.field.asnOrder.wkType")}
+                                        label={translate("table.field.outStock.wkType")}
                                         value={formData.wkType}
                                         variant="filled"
                                         onChange={(e) => handleChange(e.target.value, 'wkType')}
@@ -245,7 +245,7 @@
                                 </Grid>
                                 <Grid item md={2}>
                                     <TextField
-                                        label={translate("table.field.asnOrder.poCode")}
+                                        label={translate("table.field.outStock.poCode")}
                                         value={formData.poCode}
                                         variant="filled"
                                         size='small'
@@ -254,7 +254,7 @@
                                 </Grid>
                                 <Grid item md={2}>
                                     <TextField
-                                        label={translate("table.field.asnOrder.logisNo")}
+                                        label={translate("table.field.outStock.logisNo")}
                                         value={formData.logisNo}
                                         variant="filled"
                                         size='small'
@@ -264,7 +264,7 @@
                                 <Grid item md={2}>
                                     <DateInput
                                         source="arrTime"
-                                        label="table.field.asnOrder.arrTime"
+                                        label="table.field.outStock.arrTime"
                                         size='small'
                                         variant="filled"
                                         value={formData.arrTime}
@@ -294,7 +294,7 @@
                     </Toolbar>
                 </DialogActions>
             </Dialog>
-            <AsnWareModal
+            <MatnrInfoModal
                 open={createDialog}
                 setOpen={setCreateDialog}
                 data={tabelData}
@@ -424,19 +424,19 @@
     const [columns, setColumns] = useState([
         {
             field: 'maktx',
-            headerName: translate('table.field.asnOrderItem.maktx'),
+            headerName: translate('table.field.outStockItem.maktx'),
             width: 250,
             editable: false,
         },
         {
             field: 'matnrCode',
-            headerName: translate('table.field.asnOrderItem.matnrCode'),
+            headerName: translate('table.field.outStockItem.matnrCode'),
             width: 130,
             editable: false,
         },
         {
             field: 'anfme',
-            headerName: translate('table.field.asnOrderItem.anfme') + "*",
+            headerName: translate('table.field.outStockItem.anfme') + "*",
             type: 'number',
             minWidth: 100,
             flex: 1,
@@ -446,7 +446,7 @@
         },
         {
             field: 'splrCode',
-            headerName: translate('table.field.asnOrderItem.splrCode') + "*",
+            headerName: translate('table.field.outStockItem.splrCode') + "*",
             minWidth: 100,
             flex: 1,
             editable: true,
@@ -457,7 +457,7 @@
         },
         {
             field: 'splrName',
-            headerName: translate('table.field.asnOrderItem.splrName') + "*",
+            headerName: translate('table.field.outStockItem.splrName') + "*",
             minWidth: 100,
             flex: 1,
             editable: true,
@@ -481,7 +481,7 @@
         // },
         {
             field: 'poCode',
-            headerName: translate('table.field.asnOrderItem.poDetlCode') + "*",
+            headerName: translate('table.field.outStockItem.poDetlCode') + "*",
             minWidth: 100,
             flex: 1,
             editable: true,
@@ -490,7 +490,7 @@
 
         {
             field: 'stockUnit',
-            headerName: translate('table.field.asnOrderItem.stockUnit'),
+            headerName: translate('table.field.outStockItem.stockUnit'),
             minWidth: 100,
             flex: 1,
             editable: false,
@@ -504,7 +504,7 @@
         // },
         {
             field: 'purUnit',
-            headerName: translate('table.field.asnOrderItem.purUnit'),
+            headerName: translate('table.field.outStockItem.purUnit'),
             minWidth: 100,
             flex: 1,
             editable: false,
@@ -583,7 +583,7 @@
                 rows={tabelData}
                 columns={columns}
                 disableRowSelectionOnClick
-                getRowId={(row) => row.matnrId}
+                getRowId={(row) => row.matnrId ? row.matnrId : row.id}
                 disableColumnFilter
                 disableColumnSelector
                 disableColumnSorting
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OrderController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OrderController.java
deleted file mode 100644
index e1f4da1..0000000
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OrderController.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package com.vincent.rsf.server.manager.controller;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.vincent.rsf.framework.common.Cools;
-import com.vincent.rsf.framework.common.R;
-import com.vincent.rsf.server.common.utils.ExcelUtil;
-import com.vincent.rsf.server.common.annotation.OperationLog;
-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.Order;
-import com.vincent.rsf.server.manager.service.OrderService;
-import com.vincent.rsf.server.system.controller.BaseController;
-import io.swagger.annotations.Api;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServletResponse;
-import java.util.*;
-
-@Api(tags = "缁煎悎璁㈠崟绠$悊")
-@RestController
-public class OrderController extends BaseController {
-
-    @Autowired
-    private OrderService orderService;
-
-    @PreAuthorize("hasAuthority('manager:order:list')")
-    @PostMapping("/order/page")
-    public R page(@RequestBody Map<String, Object> map) {
-        BaseParam baseParam = buildParam(map, BaseParam.class);
-        PageParam<Order, BaseParam> pageParam = new PageParam<>(baseParam, Order.class);
-        return R.ok().add(orderService.page(pageParam, pageParam.buildWrapper(true)));
-    }
-
-    @PreAuthorize("hasAuthority('manager:order:list')")
-    @PostMapping("/order/list")
-    public R list(@RequestBody Map<String, Object> map) {
-        return R.ok().add(orderService.list());
-    }
-
-    @PreAuthorize("hasAuthority('manager:order:list')")
-    @PostMapping({"/order/many/{ids}", "/orders/many/{ids}"})
-    public R many(@PathVariable Long[] ids) {
-        return R.ok().add(orderService.listByIds(Arrays.asList(ids)));
-    }
-
-    @PreAuthorize("hasAuthority('manager:order:list')")
-    @GetMapping("/order/{id}")
-    public R get(@PathVariable("id") Long id) {
-        return R.ok().add(orderService.getById(id));
-    }
-
-    @PreAuthorize("hasAuthority('manager:order:save')")
-    @OperationLog("Create 缁煎悎璁㈠崟绠$悊")
-    @PostMapping("/order/save")
-    public R save(@RequestBody Order order) {
-        order.setCreateBy(getLoginUserId());
-        order.setCreateTime(new Date());
-        order.setUpdateBy(getLoginUserId());
-        order.setUpdateTime(new Date());
-        if (!orderService.save(order)) {
-            return R.error("Save Fail");
-        }
-        return R.ok("Save Success").add(order);
-    }
-
-    @PreAuthorize("hasAuthority('manager:order:update')")
-    @OperationLog("Update 缁煎悎璁㈠崟绠$悊")
-    @PostMapping("/order/update")
-    public R update(@RequestBody Order order) {
-        order.setUpdateBy(getLoginUserId());
-        order.setUpdateTime(new Date());
-        if (!orderService.updateById(order)) {
-            return R.error("Update Fail");
-        }
-        return R.ok("Update Success").add(order);
-    }
-
-    @PreAuthorize("hasAuthority('manager:order:remove')")
-    @OperationLog("Delete 缁煎悎璁㈠崟绠$悊")
-    @PostMapping("/order/remove/{ids}")
-    public R remove(@PathVariable Long[] ids) {
-        if (!orderService.removeByIds(Arrays.asList(ids))) {
-            return R.error("Delete Fail");
-        }
-        return R.ok("Delete Success").add(ids);
-    }
-
-    @PreAuthorize("hasAuthority('manager:order:list')")
-    @PostMapping("/order/query")
-    public R query(@RequestParam(required = false) String condition) {
-        List<KeyValVo> vos = new ArrayList<>();
-        LambdaQueryWrapper<Order> wrapper = new LambdaQueryWrapper<>();
-        if (!Cools.isEmpty(condition)) {
-            wrapper.like(Order::getId, condition);
-        }
-        orderService.page(new Page<>(1, 30), wrapper).getRecords().forEach(
-                item -> vos.add(new KeyValVo(item.getId(), item.getId()))
-        );
-        return R.ok().add(vos);
-    }
-
-    @PreAuthorize("hasAuthority('manager:order:list')")
-    @PostMapping("/order/export")
-    public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
-        ExcelUtil.build(ExcelUtil.create(orderService.list(), Order.class), response);
-    }
-
-}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OrderItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OrderItemController.java
deleted file mode 100644
index 01ad696..0000000
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/OrderItemController.java
+++ /dev/null
@@ -1,110 +0,0 @@
-package com.vincent.rsf.server.manager.controller;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.vincent.rsf.framework.common.Cools;
-import com.vincent.rsf.framework.common.R;
-import com.vincent.rsf.server.common.utils.ExcelUtil;
-import com.vincent.rsf.server.common.annotation.OperationLog;
-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.OrderItem;
-import com.vincent.rsf.server.manager.service.OrderItemService;
-import com.vincent.rsf.server.system.controller.BaseController;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServletResponse;
-import java.util.*;
-
-@RestController
-public class OrderItemController extends BaseController {
-
-    @Autowired
-    private OrderItemService orderItemService;
-
-    @PreAuthorize("hasAuthority('manager:orderItem:list')")
-    @PostMapping("/orderItem/page")
-    public R page(@RequestBody Map<String, Object> map) {
-        BaseParam baseParam = buildParam(map, BaseParam.class);
-        PageParam<OrderItem, BaseParam> pageParam = new PageParam<>(baseParam, OrderItem.class);
-        return R.ok().add(orderItemService.page(pageParam, pageParam.buildWrapper(true)));
-    }
-
-    @PreAuthorize("hasAuthority('manager:orderItem:list')")
-    @PostMapping("/orderItem/list")
-    public R list(@RequestBody Map<String, Object> map) {
-        return R.ok().add(orderItemService.list());
-    }
-
-    @PreAuthorize("hasAuthority('manager:orderItem:list')")
-    @PostMapping({"/orderItem/many/{ids}", "/orderItems/many/{ids}"})
-    public R many(@PathVariable Long[] ids) {
-        return R.ok().add(orderItemService.listByIds(Arrays.asList(ids)));
-    }
-
-    @PreAuthorize("hasAuthority('manager:orderItem:list')")
-    @GetMapping("/orderItem/{id}")
-    public R get(@PathVariable("id") Long id) {
-        return R.ok().add(orderItemService.getById(id));
-    }
-
-    @PreAuthorize("hasAuthority('manager:orderItem:save')")
-    @OperationLog("Create 缁煎悎璁㈠崟鏄庣粏绠$悊")
-    @PostMapping("/orderItem/save")
-    public R save(@RequestBody OrderItem orderItem) {
-        orderItem.setCreateBy(getLoginUserId());
-        orderItem.setCreateTime(new Date());
-        orderItem.setUpdateBy(getLoginUserId());
-        orderItem.setUpdateTime(new Date());
-        if (!orderItemService.save(orderItem)) {
-            return R.error("Save Fail");
-        }
-        return R.ok("Save Success").add(orderItem);
-    }
-
-    @PreAuthorize("hasAuthority('manager:orderItem:update')")
-    @OperationLog("Update 缁煎悎璁㈠崟鏄庣粏绠$悊")
-    @PostMapping("/orderItem/update")
-    public R update(@RequestBody OrderItem orderItem) {
-        orderItem.setUpdateBy(getLoginUserId());
-        orderItem.setUpdateTime(new Date());
-        if (!orderItemService.updateById(orderItem)) {
-            return R.error("Update Fail");
-        }
-        return R.ok("Update Success").add(orderItem);
-    }
-
-    @PreAuthorize("hasAuthority('manager:orderItem:remove')")
-    @OperationLog("Delete 缁煎悎璁㈠崟鏄庣粏绠$悊")
-    @PostMapping("/orderItem/remove/{ids}")
-    public R remove(@PathVariable Long[] ids) {
-        if (!orderItemService.removeByIds(Arrays.asList(ids))) {
-            return R.error("Delete Fail");
-        }
-        return R.ok("Delete Success").add(ids);
-    }
-
-    @PreAuthorize("hasAuthority('manager:orderItem:list')")
-    @PostMapping("/orderItem/query")
-    public R query(@RequestParam(required = false) String condition) {
-        List<KeyValVo> vos = new ArrayList<>();
-        LambdaQueryWrapper<OrderItem> wrapper = new LambdaQueryWrapper<>();
-        if (!Cools.isEmpty(condition)) {
-            wrapper.like(OrderItem::getId, condition);
-        }
-        orderItemService.page(new Page<>(1, 30), wrapper).getRecords().forEach(
-                item -> vos.add(new KeyValVo(item.getId(), item.getId()))
-        );
-        return R.ok().add(vos);
-    }
-
-    @PreAuthorize("hasAuthority('manager:orderItem:list')")
-    @PostMapping("/orderItem/export")
-    public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
-        ExcelUtil.build(ExcelUtil.create(orderItemService.list(), OrderItem.class), response);
-    }
-
-}
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 058422e..14d847d 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
@@ -219,11 +219,11 @@
     @PostMapping("/outStock/items/save")
     @ApiOperation("淇濆瓨涓诲崟鍙婃槑缁�")
     @PreAuthorize("hasAuthority('manager:outStock:save')")
-    public R orderAndItem(@RequestBody AsnOrderAndItemsParams params) throws Exception {
+    public R saveOutStock(@RequestBody AsnOrderAndItemsParams params) throws Exception {
         if (Objects.isNull(params)) {
             return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
-        return outStockService.saveOrderAndItems(params, getLoginUserId());
+        return outStockService.saveOutStock(params, getLoginUserId());
     }
 
     @ApiOperation("鍗曟嵁淇℃伅淇敼")
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Order.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Order.java
deleted file mode 100644
index aedf5a6..0000000
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Order.java
+++ /dev/null
@@ -1,221 +0,0 @@
-package com.vincent.rsf.server.manager.entity;
-
-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;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableLogic;
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import com.vincent.rsf.framework.common.Cools;
-import com.vincent.rsf.framework.common.SpringUtils;
-import com.vincent.rsf.server.system.service.UserService;
-import com.vincent.rsf.server.system.entity.User;
-import java.io.Serializable;
-import java.util.Date;
-
-@Data
-@Accessors(chain = true)
-@TableName("man_order")
-public class Order implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * ID
-     */
-    @ApiModelProperty(value= "ID")
-    @TableId(value = "id", type = IdType.AUTO)
-    private Long id;
-
-    /**
-     * 缂栧彿
-     */
-    @ApiModelProperty(value= "缂栧彿")
-    private String code;
-
-    /**
-     * 婧愬崟鎹紪鐮�
-     */
-    @ApiModelProperty(value= "婧愬崟鎹紪鐮�")
-    private String sourceCode;
-
-    /**
-     * 婧愬崟鎹甀D
-     */
-    @ApiModelProperty(value= "婧愬崟鎹甀D")
-    private Long sourceId;
-
-    /**
-     * 鍗曟嵁绫诲瀷
-     */
-    @ApiModelProperty(value= "鍗曟嵁绫诲瀷")
-    private String type;
-
-    /**
-     * 涓氬姟绫诲瀷
-     */
-    @ApiModelProperty(value= "涓氬姟绫诲瀷")
-    private String wkType;
-
-    /**
-     * 搴撳瓨鏁伴噺
-     */
-    @ApiModelProperty(value= "搴撳瓨鏁伴噺")
-    private Double anfme;
-
-    /**
-     * 鐘舵�� 1: 姝e父  0: 鍐荤粨  
-     */
-    @ApiModelProperty(value= "鐘舵�� 1: 姝e父  0: 鍐荤粨  ")
-    private Integer status;
-
-    /**
-     * 鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  
-     */
-    @ApiModelProperty(value= "鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  ")
-    @TableLogic
-    private Integer deleted;
-
-    /**
-     * 绉熸埛
-     */
-    @ApiModelProperty(value= "绉熸埛")
-    private Integer tenantId;
-
-    /**
-     * 娣诲姞浜哄憳
-     */
-    @ApiModelProperty(value= "娣诲姞浜哄憳")
-    private Long createBy;
-
-    /**
-     * 娣诲姞鏃堕棿
-     */
-    @ApiModelProperty(value= "娣诲姞鏃堕棿")
-    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
-    private Date createTime;
-
-    /**
-     * 淇敼浜哄憳
-     */
-    @ApiModelProperty(value= "淇敼浜哄憳")
-    private Long updateBy;
-
-    /**
-     * 淇敼鏃堕棿
-     */
-    @ApiModelProperty(value= "淇敼鏃堕棿")
-    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
-    private Date updateTime;
-
-    /**
-     * 澶囨敞
-     */
-    @ApiModelProperty(value= "澶囨敞")
-    private String memo;
-
-    public Order() {}
-
-    public Order(String code,String sourceCode,Long sourceId,String type,String wkType,Double anfme,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
-        this.code = code;
-        this.sourceCode = sourceCode;
-        this.sourceId = sourceId;
-        this.type = type;
-        this.wkType = wkType;
-        this.anfme = anfme;
-        this.status = status;
-        this.deleted = deleted;
-        this.tenantId = tenantId;
-        this.createBy = createBy;
-        this.createTime = createTime;
-        this.updateBy = updateBy;
-        this.updateTime = updateTime;
-        this.memo = memo;
-    }
-
-//    Order order = new Order(
-//            null,    // 缂栧彿
-//            null,    // 婧愬崟鎹紪鐮�
-//            null,    // 婧愬崟鎹甀D
-//            null,    // 鍗曟嵁绫诲瀷[闈炵┖]
-//            null,    // 涓氬姟绫诲瀷[闈炵┖]
-//            null,    // 搴撳瓨鏁伴噺[闈炵┖]
-//            null,    // 鐘舵�乕闈炵┖]
-//            null,    // 鏄惁鍒犻櫎[闈炵┖]
-//            null,    // 绉熸埛
-//            null,    // 娣诲姞浜哄憳
-//            null,    // 娣诲姞鏃堕棿[闈炵┖]
-//            null,    // 淇敼浜哄憳
-//            null,    // 淇敼鏃堕棿[闈炵┖]
-//            null    // 澶囨敞
-//    );
-
-    public String getStatus$(){
-        if (null == this.status){ return null; }
-        switch (this.status){
-            case 1:
-                return "姝e父";
-            case 0:
-                return "鍐荤粨";
-            default:
-                return String.valueOf(this.status);
-        }
-    }
-
-    public String getCreateBy$(){
-        UserService service = SpringUtils.getBean(UserService.class);
-        User user = service.getById(this.createBy);
-        if (!Cools.isEmpty(user)){
-            return String.valueOf(user.getNickname());
-        }
-        return null;
-    }
-
-    public String getCreateTime$(){
-        if (Cools.isEmpty(this.createTime)){
-            return "";
-        }
-        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
-    }
-
-    public String getUpdateBy$(){
-        UserService service = SpringUtils.getBean(UserService.class);
-        User user = service.getById(this.updateBy);
-        if (!Cools.isEmpty(user)){
-            return String.valueOf(user.getNickname());
-        }
-        return null;
-    }
-
-    public String getUpdateTime$(){
-        if (Cools.isEmpty(this.updateTime)){
-            return "";
-        }
-        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
-    }
-
-
-
-    public Boolean getStatusBool(){
-        if (null == this.status){ return null; }
-        switch (this.status){
-            case 1:
-                return true;
-            case 0:
-                return false;
-            default:
-                return null;
-        }
-    }
-
-}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/OrderItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/OrderItem.java
deleted file mode 100644
index 7ed3564..0000000
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/OrderItem.java
+++ /dev/null
@@ -1,333 +0,0 @@
-package com.vincent.rsf.server.manager.entity;
-
-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;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableLogic;
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import com.vincent.rsf.framework.common.Cools;
-import com.vincent.rsf.framework.common.SpringUtils;
-import com.vincent.rsf.server.system.service.UserService;
-import com.vincent.rsf.server.system.entity.User;
-import java.io.Serializable;
-import java.util.Date;
-
-@Data
-@Accessors(chain = true)
-@TableName("man_order_item")
-public class OrderItem implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * ID
-     */
-    @ApiModelProperty(value= "ID")
-    @TableId(value = "id", type = IdType.AUTO)
-    private Long id;
-
-    /**
-     * 涓诲崟ID
-     */
-    @ApiModelProperty(value= "涓诲崟ID")
-    private Long orderId;
-
-    /**
-     * 涓诲崟缂栧彿
-     */
-    @ApiModelProperty(value= "涓诲崟缂栧彿")
-    private String orderCode;
-
-    /**
-     * 缂栧彿
-     */
-    @ApiModelProperty(value= "缂栧彿")
-    private String sourceItemId;
-
-    /**
-     * 鐗╂枡ID
-     */
-    @ApiModelProperty(value= "鐗╂枡ID")
-    private String matnrId;
-
-    /**
-     * 鐗╂枡缂栫爜
-     */
-    @ApiModelProperty(value= "鐗╂枡缂栫爜")
-    private String matnrCode;
-
-    /**
-     * 鐗╂枡鍚嶇О
-     */
-    @ApiModelProperty(value= "鐗╂枡鍚嶇О")
-    private String maktx;
-
-    /**
-     * 閫佽揣鏁伴噺
-     */
-    @ApiModelProperty(value= "閫佽揣鏁伴噺")
-    private Double anfme;
-
-    /**
-     * 搴撳瓨鍗曚綅
-     */
-    @ApiModelProperty(value= "搴撳瓨鍗曚綅")
-    private String stockUnit;
-
-    /**
-     * 鎵ц涓暟閲�
-     */
-    @ApiModelProperty(value= "鎵ц涓暟閲�")
-    private Double workQty;
-
-    /**
-     * 閲囪喘鏁伴噺
-     */
-    @ApiModelProperty(value= "閲囪喘鏁伴噺")
-    private Double purQty;
-
-    /**
-     * 閲囪喘鍗曚綅
-     */
-    @ApiModelProperty(value= "閲囪喘鍗曚綅")
-    private String purUnit;
-
-    /**
-     * 宸叉敹鏁伴噺
-     */
-    @ApiModelProperty(value= "宸叉敹鏁伴噺")
-    private Double qty;
-
-    /**
-     * 渚涘簲鍟嗙紪鐮�
-     */
-    @ApiModelProperty(value= "渚涘簲鍟嗙紪鐮�")
-    private String splrCode;
-
-    /**
-     * 搴撳瓨鎵规
-     */
-    @ApiModelProperty(value= "搴撳瓨鎵规")
-    private String batch;
-
-    /**
-     * 渚涘簲鍟嗘壒娆�
-     */
-    @ApiModelProperty(value= "渚涘簲鍟嗘壒娆�")
-    private String splrBatch;
-
-    /**
-     * 渚涘簲鍟嗗悕绉�
-     */
-    @ApiModelProperty(value= "渚涘簲鍟嗗悕绉�")
-    private String splrName;
-
-    /**
-     * 璺熻釜鐮�
-     */
-    @ApiModelProperty(value= "璺熻釜鐮�")
-    private String trackCode;
-
-    /**
-     * 鏉″舰鐮�
-     */
-    @ApiModelProperty(value= "鏉″舰鐮�")
-    private String barcode;
-
-    /**
-     * 鐢熶骇鏃ユ湡
-     */
-    @ApiModelProperty(value= "鐢熶骇鏃ユ湡")
-    private String prodTime;
-
-    /**
-     * 鍖呰鍚嶇О
-     */
-    @ApiModelProperty(value= "鍖呰鍚嶇О")
-    private String packName;
-
-    /**
-     * 鐘舵�� 1: 姝e父  0: 鍐荤粨  
-     */
-    @ApiModelProperty(value= "鐘舵�� 1: 姝e父  0: 鍐荤粨  ")
-    private Integer status;
-
-    /**
-     * 鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  
-     */
-    @ApiModelProperty(value= "鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  ")
-    @TableLogic
-    private Integer deleted;
-
-    /**
-     * 绉熸埛
-     */
-    @ApiModelProperty(value= "绉熸埛")
-    private Integer tenantId;
-
-    /**
-     * 娣诲姞浜哄憳
-     */
-    @ApiModelProperty(value= "娣诲姞浜哄憳")
-    private Long createBy;
-
-    /**
-     * 娣诲姞鏃堕棿
-     */
-    @ApiModelProperty(value= "娣诲姞鏃堕棿")
-    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
-    private Date createTime;
-
-    /**
-     * 淇敼浜哄憳
-     */
-    @ApiModelProperty(value= "淇敼浜哄憳")
-    private Long updateBy;
-
-    /**
-     * 淇敼鏃堕棿
-     */
-    @ApiModelProperty(value= "淇敼鏃堕棿")
-    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
-    private Date updateTime;
-
-    /**
-     * 澶囨敞
-     */
-    @ApiModelProperty(value= "澶囨敞")
-    private String memo;
-
-    public OrderItem() {}
-
-    public OrderItem(Long orderId,String orderCode,String sourceItemId,String matnrId,String matnrCode,String maktx,Double anfme,String stockUnit,Double workQty,Double purQty,String purUnit,Double qty,String splrCode,String batch,String splrBatch,String splrName,String trackCode,String barcode,String prodTime,String packName,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
-        this.orderId = orderId;
-        this.orderCode = orderCode;
-        this.sourceItemId = sourceItemId;
-        this.matnrId = matnrId;
-        this.matnrCode = matnrCode;
-        this.maktx = maktx;
-        this.anfme = anfme;
-        this.stockUnit = stockUnit;
-        this.workQty = workQty;
-        this.purQty = purQty;
-        this.purUnit = purUnit;
-        this.qty = qty;
-        this.splrCode = splrCode;
-        this.batch = batch;
-        this.splrBatch = splrBatch;
-        this.splrName = splrName;
-        this.trackCode = trackCode;
-        this.barcode = barcode;
-        this.prodTime = prodTime;
-        this.packName = packName;
-        this.status = status;
-        this.deleted = deleted;
-        this.tenantId = tenantId;
-        this.createBy = createBy;
-        this.createTime = createTime;
-        this.updateBy = updateBy;
-        this.updateTime = updateTime;
-        this.memo = memo;
-    }
-
-//    OrderItem orderItem = new OrderItem(
-//            null,    // 涓诲崟ID
-//            null,    // 涓诲崟缂栧彿
-//            null,    // 缂栧彿
-//            null,    // 鐗╂枡ID
-//            null,    // 鐗╂枡缂栫爜
-//            null,    // 鐗╂枡鍚嶇О
-//            null,    // 閫佽揣鏁伴噺[闈炵┖]
-//            null,    // 搴撳瓨鍗曚綅
-//            null,    // 鎵ц涓暟閲廩闈炵┖]
-//            null,    // 閲囪喘鏁伴噺[闈炵┖]
-//            null,    // 閲囪喘鍗曚綅
-//            null,    // 宸叉敹鏁伴噺
-//            null,    // 渚涘簲鍟嗙紪鐮�
-//            null,    // 搴撳瓨鎵规
-//            null,    // 渚涘簲鍟嗘壒娆�
-//            null,    // 渚涘簲鍟嗗悕绉�
-//            null,    // 璺熻釜鐮�
-//            null,    // 鏉″舰鐮�
-//            null,    // 鐢熶骇鏃ユ湡
-//            null,    // 鍖呰鍚嶇О
-//            null,    // 鐘舵�乕闈炵┖]
-//            null,    // 鏄惁鍒犻櫎[闈炵┖]
-//            null,    // 绉熸埛
-//            null,    // 娣诲姞浜哄憳
-//            null,    // 娣诲姞鏃堕棿[闈炵┖]
-//            null,    // 淇敼浜哄憳
-//            null,    // 淇敼鏃堕棿[闈炵┖]
-//            null    // 澶囨敞
-//    );
-
-    public String getStatus$(){
-        if (null == this.status){ return null; }
-        switch (this.status){
-            case 1:
-                return "姝e父";
-            case 0:
-                return "鍐荤粨";
-            default:
-                return String.valueOf(this.status);
-        }
-    }
-
-    public String getCreateBy$(){
-        UserService service = SpringUtils.getBean(UserService.class);
-        User user = service.getById(this.createBy);
-        if (!Cools.isEmpty(user)){
-            return String.valueOf(user.getNickname());
-        }
-        return null;
-    }
-
-    public String getCreateTime$(){
-        if (Cools.isEmpty(this.createTime)){
-            return "";
-        }
-        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
-    }
-
-    public String getUpdateBy$(){
-        UserService service = SpringUtils.getBean(UserService.class);
-        User user = service.getById(this.updateBy);
-        if (!Cools.isEmpty(user)){
-            return String.valueOf(user.getNickname());
-        }
-        return null;
-    }
-
-    public String getUpdateTime$(){
-        if (Cools.isEmpty(this.updateTime)){
-            return "";
-        }
-        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
-    }
-
-
-
-    public Boolean getStatusBool(){
-        if (null == this.status){ return null; }
-        switch (this.status){
-            case 1:
-                return true;
-            case 0:
-                return false;
-            default:
-                return null;
-        }
-    }
-
-}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/OrderItemMapper.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/OrderItemMapper.java
deleted file mode 100644
index 7833525..0000000
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/OrderItemMapper.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.vincent.rsf.server.manager.mapper;
-
-import com.vincent.rsf.server.manager.entity.OrderItem;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-import org.springframework.stereotype.Repository;
-
-@Mapper
-@Repository
-public interface OrderItemMapper extends BaseMapper<OrderItem> {
-
-}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/OrderMapper.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/OrderMapper.java
deleted file mode 100644
index 69fdd58..0000000
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/OrderMapper.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.vincent.rsf.server.manager.mapper;
-
-import com.vincent.rsf.server.manager.entity.Order;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-import org.springframework.stereotype.Repository;
-
-@Mapper
-@Repository
-public interface OrderMapper extends BaseMapper<Order> {
-
-}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
index 919b81a..4246785 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
@@ -50,10 +50,6 @@
     private StockService stockService;
     @Autowired
     private LocService locService;
-    @Autowired
-    private OrderService orderService;
-    @Autowired
-    private OrderItemService orderItemService;
     /**
     * @author Ryan
     * @description 瀹屾垚鍏ュ簱锛屾洿鏂板簱瀛�
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OrderItemService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OrderItemService.java
deleted file mode 100644
index 99b4dcd..0000000
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OrderItemService.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.vincent.rsf.server.manager.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.vincent.rsf.server.manager.entity.OrderItem;
-
-public interface OrderItemService extends IService<OrderItem> {
-
-}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OrderService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OrderService.java
deleted file mode 100644
index 772088d..0000000
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OrderService.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.vincent.rsf.server.manager.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.vincent.rsf.server.manager.entity.Order;
-
-public interface OrderService extends IService<Order> {
-
-}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OutStockService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OutStockService.java
index 71a70bd..e33856f 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OutStockService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OutStockService.java
@@ -17,7 +17,7 @@
 
     R generateWaves(List<Long> ids);
 
-    R saveOrderAndItems(AsnOrderAndItemsParams params, Long loginUserId);
+    R saveOutStock(AsnOrderAndItemsParams params, Long loginUserId);
 
     R updateOrderItem(AsnOrderAndItemsParams params, Long loginUserId);
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java
index 768ef85..d8daa85 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java
@@ -165,11 +165,14 @@
         if (StringUtils.isBlank(asnOrderItem.getTrackCode())) {
             String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_LABEL_CODE, asnOrderItem);
             asnOrderItem.setTrackCode(ruleCode).setBarcode(ruleCode);
-            ;
+
         }
         if (Objects.isNull(asnOrderItem.getAnfme()) || Double.compare(asnOrderItem.getAnfme(), 0.0) <= 0) {
-            throw new CoolException("璁″垝鏀惰揣鏁颁笉鑳戒负绌猴紒锛�");
+            throw new CoolException("璁″垝鏁颁笉鑳戒负绌猴紒锛�");
         }
+//        if (StringUtils.isBlank(asnOrderItem.getSplrBatch())) {
+//            throw new CoolException("渚涘簲鍟嗘壒娆′笉鑳戒负绌猴紒锛�");
+//        }
         //淇濆瓨鎵╁睍瀛楁
         try {
             String uuid16 = CommonUtil.randomUUID16();
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
index 741bcda..5f6f3c7 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
@@ -119,6 +119,7 @@
         if (params.getItems().isEmpty()) {
             throw new CoolException("鏀惰揣閫氱煡鍗曟槑缁嗕笉鑳戒负瀵掗鑺傦紒锛�");
         }
+        params.setOrders(orders);
 
         svaeOrUpdateOrderItem(params,loginUserId);
 
@@ -164,7 +165,6 @@
     @Transactional(rollbackFor = Exception.class)
     private void svaeOrUpdateOrderItem(AsnOrderAndItemsParams params, Long loginUserId) throws Exception{
         AsnOrder orders = params.getOrders();
-
         params.getItems().forEach(item -> {
             item.put("asnId", orders.getId());
             item.put("asnCode", orders.getCode());
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OrderItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OrderItemServiceImpl.java
deleted file mode 100644
index 897ef9d..0000000
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OrderItemServiceImpl.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.vincent.rsf.server.manager.service.impl;
-
-import com.vincent.rsf.server.manager.mapper.OrderItemMapper;
-import com.vincent.rsf.server.manager.entity.OrderItem;
-import com.vincent.rsf.server.manager.service.OrderItemService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
-
-@Service("orderItemService")
-public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem> implements OrderItemService {
-
-}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OrderServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OrderServiceImpl.java
deleted file mode 100644
index f523ebe..0000000
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OrderServiceImpl.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.vincent.rsf.server.manager.service.impl;
-
-import com.vincent.rsf.server.manager.mapper.OrderMapper;
-import com.vincent.rsf.server.manager.entity.Order;
-import com.vincent.rsf.server.manager.service.OrderService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
-
-@Service("orderService")
-public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
-
-}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
index 20dc185..464ab07 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
@@ -6,6 +6,7 @@
 import com.vincent.rsf.framework.common.Cools;
 import com.vincent.rsf.framework.common.R;
 import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.server.api.entity.enums.OrderType;
 import com.vincent.rsf.server.manager.controller.params.AsnOrderAndItemsParams;
 import com.vincent.rsf.server.manager.entity.*;
 import com.vincent.rsf.server.manager.enums.AsnExceStatus;
@@ -62,7 +63,6 @@
     @Transactional(rollbackFor = Exception.class)
     private void svaeOrUpdateOrderItem(AsnOrderAndItemsParams params, Long loginUserId) throws Exception {
         AsnOrder orders = params.getOrders();
-
         params.getItems().forEach(item -> {
             item.put("asnId", orders.getId());
             item.put("asnCode", orders.getCode());
@@ -317,7 +317,8 @@
      * @time 2025/4/29 13:47
      */
     @Override
-    public R saveOrderAndItems(AsnOrderAndItemsParams params, Long loginUserId) {
+    @Transactional(rollbackFor = Exception.class)
+    public R saveOutStock(AsnOrderAndItemsParams params, Long loginUserId) {
         if (Objects.isNull(params.getOrders())) {
             throw new CoolException("涓诲崟淇℃伅涓嶈兘涓虹┖");
         }
@@ -325,26 +326,35 @@
         if (Objects.isNull(orders)) {
             throw new CoolException("鍗曟嵁涓嶈兘涓虹┖锛侊紒");
         }
+        if (StringUtils.isBlank(orders.getWkType())) {
+            throw new CoolException("涓氬姟绫诲瀷涓嶈兘涓虹┖锛侊紒");
+        }
+
         String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_OUT_STOCK_CODE, orders);
         if (Objects.isNull(ruleCode) || StringUtils.isBlank(ruleCode)) {
             throw new CoolException("缂栫爜瑙勫垯閿欒锛氳妫�鏌ャ�孲YS_OUT_STOCK_CODE銆嶆槸鍚﹁缃纭紒锛�");
         }
+
         orders.setCode(ruleCode)
+                .setType(OrderType.ORDER_OUT.type)
                 .setUpdateBy(loginUserId)
                 .setCreateBy(loginUserId);
         if (!this.save(orders)) {
             throw new CoolException("涓诲崟淇濆瓨澶辫触锛侊紒");
         }
         if (params.getItems().isEmpty()) {
-            throw new CoolException("鏀惰揣閫氱煡鍗曟槑缁嗕笉鑳戒负瀵掗鑺傦紒锛�");
+            throw new CoolException("鏀惰揣閫氱煡鍗曟槑缁嗕笉鑳戒负绌猴紒锛�");
+        }
+        params.setOrders(orders);
+        try {
+            svaeOrUpdateOrderItem(params,loginUserId);
+        } catch (Exception e) {
+            throw new CoolException(e.getMessage());
         }
 
-//        svaeOrUpdateOrderItem(params,loginUserId);
-
-
-
-        return null;
+        return R.ok();
     }
+
 
     /**
      * @author Ryan
@@ -355,6 +365,26 @@
      */
     @Override
     public R updateOrderItem(AsnOrderAndItemsParams params, Long loginUserId) {
+        AsnOrder orders = params.getOrders();
+        if (Objects.isNull(orders)) {
+            throw new CoolException("涓诲崟淇℃伅涓嶈兘涓虹┖锛侊紒");
+        }
+        if (Objects.isNull(orders.getId())) {
+            throw new CoolException("鏁版嵁閿欒锛氬崟鎹甀D涓嶈兘涓虹┖锛侊紒");
+        }
+        if (!this.updateById(orders)) {
+            throw new CoolException("涓诲崟淇敼澶辫触锛侊紒");
+        }
+        if (Objects.isNull(params.getItems()) || params.getItems().isEmpty()) {
+            return R.ok("鏄庣粏鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+
+        try {
+            svaeOrUpdateOrderItem(params,loginUserId);
+        } catch (Exception e) {
+            throw new CoolException(e.getMessage());
+        }
+
         return null;
     }
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
index d4b4f22..fcc9fcb 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -54,16 +54,8 @@
     private StockItemService stockItemService;
     @Autowired
     private DeviceSiteService deviceSiteService;
-
-    @Autowired
-    private OrderService orderService;
-
-    @Autowired
-    private OrderItemService orderItemService;
-
     @Autowired
     private LocItemService locItemService;
-
     @Autowired
     private DeviceBindService deviceBindService;
     @Autowired

--
Gitblit v1.9.1