From 34079a90f7fbdd0f1c47aeb75588628ebf21f15a Mon Sep 17 00:00:00 2001
From: verou <857149855@qq.com>
Date: 星期四, 10 四月 2025 13:25:20 +0800
Subject: [PATCH] Merge branch 'devlop' of http://47.97.1.152:5880/r/wms-master into devlop

---
 rsf-admin/src/page/system/serialRule/SerialRuleEdit.jsx                                        |  156 +++----
 rsf-admin/src/page/system/serialRule/SerialRuleList.jsx                                        |   28 -
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java                  |    4 
 rsf-admin/src/page/asnOrderLog/AsnOrderItemLogList.jsx                                         |  177 +++++++++
 rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx                                    |  225 +++++++++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java |   98 +++-
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java        |   20 
 rsf-admin/src/page/task/TaskPanel.jsx                                                          |    3 
 rsf-admin/src/page/waitPakinLog/WaitPakinLogList.jsx                                           |   16 
 rsf-admin/src/page/system/serialRule/SerialRuleItemCreate.jsx                                  |  151 +++++++
 /dev/null                                                                                      |   18 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java |    4 
 rsf-admin/src/page/task/TaskList.jsx                                                           |   15 
 rsf-admin/src/page/waitPakinLog/WaitPakinItemLogList.jsx                                       |   34 -
 rsf-admin/src/page/waitPakinLog/WaitPakinLogEdit.jsx                                           |  125 ++---
 rsf-admin/src/page/ResourceContent.js                                                          |   13 
 16 files changed, 787 insertions(+), 300 deletions(-)

diff --git a/rsf-admin/src/page/ResourceContent.js b/rsf-admin/src/page/ResourceContent.js
index ed01cd9..2ead1d2 100644
--- a/rsf-admin/src/page/ResourceContent.js
+++ b/rsf-admin/src/page/ResourceContent.js
@@ -43,14 +43,9 @@
 import waitPakin from './waitPakin';
 import waitPakinItem from './waitPakinItem';
 import waitPakinLog from './waitPakinLog';
-import waitPakinItemLog from './waitPakinItemLog';
 import asnOrderLog from './asnOrderLog';
-// import asnOrderItemLog from './asnOrderItemLog';
 import task from './task';
-// import taskItem from './taskItem';
 import taskLog from './taskLog';
-// import taskItemLog from './taskItemLog';
-
 
 const ResourceContent = (node) => {
     switch (node.component) {
@@ -110,8 +105,6 @@
             return asnOrderItem;
         case 'asnOrderLog':
             return asnOrderLog;
-        // case 'asnOrderItemLog':
-        //     return asnOrderItemLog;
         case 'purchaseItem':
             return purchaseItem;
         case 'purchase':
@@ -136,16 +129,10 @@
             return waitPakinItem;
         case 'waitPakinLog':
             return waitPakinLog;
-        case 'waitPakinItemLog':
-            return waitPakinItemLog;
         case 'task':
             return task;
-        // case 'taskItem':
-        //     return taskItem;
         case 'taskLog':
             return taskLog;
-        // case 'taskItemLog':
-        //     return taskItemLog;
 
         default:
             return {
diff --git a/rsf-admin/src/page/asnOrderLog/AsnOrderItemLogList.jsx b/rsf-admin/src/page/asnOrderLog/AsnOrderItemLogList.jsx
new file mode 100644
index 0000000..643d4ca
--- /dev/null
+++ b/rsf-admin/src/page/asnOrderLog/AsnOrderItemLogList.jsx
@@ -0,0 +1,177 @@
+import React, { useState, useRef, useEffect, useMemo, useCallback } from "react";
+import { useNavigate } from 'react-router-dom';
+import {
+    List,
+    DatagridConfigurable,
+    SearchInput,
+    TopToolbar,
+    SelectColumnsButton,
+    EditButton,
+    FilterButton,
+    CreateButton,
+    ExportButton,
+    BulkDeleteButton,
+    WrapperField,
+    useRecordContext,
+    useTranslate,
+    useNotify,
+    useListContext,
+    FunctionField,
+    TextField,
+    NumberField,
+    DateField,
+    BooleanField,
+    ReferenceField,
+    TextInput,
+    DateTimeInput,
+    DateInput,
+    SelectInput,
+    NumberInput,
+    ReferenceInput,
+    ReferenceArrayInput,
+    AutocompleteInput,
+    DeleteButton,
+    useGetRecordId,
+} from 'react-admin';
+import { Box, Typography, Card, Stack } from '@mui/material';
+import { styled } from '@mui/material/styles';
+import EmptyData from "../components/EmptyData";
+import MyExportButton from '../components/MyExportButton';
+import PageDrawer from "../components/PageDrawer";
+import MyField from "../components/MyField";
+import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
+import * as Common from '@/utils/common';
+
+const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
+    '& .css-1vooibu-MuiSvgIcon-root': {
+        height: '.9em'
+    },
+    '& .RaDatagrid-row': {
+        cursor: 'auto'
+    },
+    '& .column-name': {
+    },
+    '& .opt': {
+        width: 200
+    },
+}));
+
+const filters = [
+    <SearchInput source="condition" alwaysOn />,
+
+    <NumberInput source="asnId" label="table.field.asnOrderItemLog.asnId" />,
+    <TextInput source="asnCode" label="table.field.asnOrderItemLog.asnCode" />,
+    <TextInput source="platItemId" label="table.field.asnOrderItemLog.platItemId" />,
+    <NumberInput source="poDetlId" label="table.field.asnOrderItemLog.poDetlId" />,
+    <TextInput source="poCode" label="table.field.asnOrderItemLog.poCode" />,
+    <TextInput source="fieldsIndex" label="table.field.asnOrderItemLog.fieldsIndex" />,
+    <TextInput source="matnrId" label="table.field.asnOrderItemLog.matnrId" />,
+    <TextInput source="matnrCode" label="table.field.asnOrderItemLog.matnrCode" />,
+    <TextInput source="maktx" label="table.field.asnOrderItemLog.maktx" />,
+    <NumberInput source="anfme" label="table.field.asnOrderItemLog.anfme" />,
+    <TextInput source="stockUnit" label="table.field.asnOrderItemLog.stockUnit" />,
+    <NumberInput source="purQty" label="table.field.asnOrderItemLog.purQty" />,
+    <TextInput source="purUnit" label="table.field.asnOrderItemLog.purUnit" />,
+    <NumberInput source="qty" label="table.field.asnOrderItemLog.qty" />,
+    <TextInput source="splrCode" label="table.field.asnOrderItemLog.splrCode" />,
+    <TextInput source="splrBatch" label="table.field.asnOrderItemLog.splrBatch" />,
+    <TextInput source="splrName" label="table.field.asnOrderItemLog.splrName" />,
+    <TextInput source="qrcode" label="table.field.asnOrderItemLog.qrcode" />,
+    <TextInput source="trackCode" label="table.field.asnOrderItemLog.trackCode" />,
+    <TextInput source="barcode" label="table.field.asnOrderItemLog.barcode" />,
+    <TextInput source="packName" label="table.field.asnOrderItemLog.packName" />,
+    <SelectInput source="ntyStatus" label="table.field.asnOrderItemLog.ntyStatus"
+        choices={[
+            { id: 0, name: ' 鏈笂鎶�' },
+            { id: 1, name: ' 宸蹭笂鎶�' },
+        ]}
+    />,
+
+    <TextInput label="common.field.memo" source="memo" />,
+    <SelectInput
+        label="common.field.status"
+        source="status"
+        choices={[
+            { id: '1', name: 'common.enums.statusTrue' },
+            { id: '0', name: 'common.enums.statusFalse' },
+        ]}
+        resettable
+    />,
+]
+
+const AsnOrderItemLogList = () => {
+    const translate = useTranslate();
+    const [createDialog, setCreateDialog] = useState(false);
+    const [drawerVal, setDrawerVal] = useState(false);
+    const recodeId = useGetRecordId();
+
+    return (
+        <Box display="flex">
+            <List
+                resource="asnOrderItemLog"
+                sx={{
+                    flexGrow: 1,
+                    transition: (theme) =>
+                        theme.transitions.create(['all'], {
+                            duration: theme.transitions.duration.enteringScreen,
+                        }),
+                    marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
+                }}
+                title={"menu.asnOrderItemLog"}
+                empty={false}
+                filters={filters}
+                filter={{ logId: recodeId }}
+                sort={{ field: "create_time", order: "desc" }}
+                actions={(
+                    <TopToolbar>
+                        <FilterButton />
+                        <SelectColumnsButton preferenceKey='asnOrderItemLog' />
+                        <MyExportButton />
+                    </TopToolbar>
+                )}
+                perPage={DEFAULT_PAGE_SIZE}
+            >
+                <StyledDatagrid
+                    preferenceKey='asnOrderItemLog'
+                    bulkActionButtons={false}
+                    rowClick={(id, resource, record) => false}
+                    omit={['id', 'asnId', 'poDetlId', 'poCode', 'qrcode', 'packName', 'createTime', 'memo', 'fieldsIndex', 'matnrId', 'splrCode', 'status', 'createBy$']}
+                >
+                    <NumberField source="id" />
+                    <NumberField source="asnId" label="table.field.asnOrderItemLog.asnId" />
+                    <TextField source="asnCode" label="table.field.asnOrderItemLog.asnCode" />
+                    <TextField source="platItemId" label="table.field.asnOrderItemLog.platItemId" />
+                    <NumberField source="poDetlId" label="table.field.asnOrderItemLog.poDetlId" />
+                    <TextField source="poCode" label="table.field.asnOrderItemLog.poCode" />
+                    <TextField source="fieldsIndex" label="table.field.asnOrderItemLog.fieldsIndex" />
+                    <TextField source="matnrId" label="table.field.asnOrderItemLog.matnrId" />
+                    <TextField source="matnrCode" label="table.field.asnOrderItemLog.matnrCode" />
+                    <TextField source="maktx" label="table.field.asnOrderItemLog.maktx" />
+                    <NumberField source="anfme" label="table.field.asnOrderItemLog.anfme" />
+                    <NumberField source="purQty" label="table.field.asnOrderItemLog.purQty" />
+                    <TextField source="purUnit" label="table.field.asnOrderItemLog.purUnit" />
+                    <NumberField source="qty" label="table.field.asnOrderItemLog.qty" />
+                    <TextField source="splrCode" label="table.field.asnOrderItemLog.splrCode" />
+                    <TextField source="splrBatch" label="table.field.asnOrderItemLog.splrBatch" />
+                    <TextField source="splrName" label="table.field.asnOrderItemLog.splrName" />
+                    <TextField source="qrcode" label="table.field.asnOrderItemLog.qrcode" />
+                    <TextField source="trackCode" label="table.field.asnOrderItemLog.trackCode" />
+                    <TextField source="packName" label="table.field.asnOrderItemLog.packName" />
+                    <TextField source="ntyStatus$" label="table.field.asnOrderItemLog.ntyStatus" sortable={false} />
+                    <TextField source="updateBy$" label="common.field.updateBy" />
+                    <TextField source="createBy$" label="common.field.createBy" />
+                    <DateField source="createTime" label="common.field.createTime" showTime />
+                    <TextField source="memo" label="common.field.memo" sortable={false} />
+                </StyledDatagrid>
+            </List>
+            <PageDrawer
+                title='AsnOrderItemLog Detail'
+                drawerVal={drawerVal}
+                setDrawerVal={setDrawerVal}
+            >
+            </PageDrawer>
+        </Box>
+    )
+}
+
+export default AsnOrderItemLogList;
diff --git a/rsf-admin/src/page/system/serialRule/SerialRuleEdit.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleEdit.jsx
index 4440c43..53cf77d 100644
--- a/rsf-admin/src/page/system/serialRule/SerialRuleEdit.jsx
+++ b/rsf-admin/src/page/system/serialRule/SerialRuleEdit.jsx
@@ -28,12 +28,13 @@
 import CustomerTopToolBar from "../../components/EditTopToolBar";
 import MemoInput from "../../components/MemoInput";
 import StatusSelectInput from "../../components/StatusSelectInput";
+import SerialRuleItemList from "./SerialRuleItemList";
 
 const FormToolbar = () => {
     const { getValues } = useFormContext();
 
     return (
-        <Toolbar sx={{ justifyContent: 'space-between' }}>
+        <Toolbar sx={{ justifyContent: 'end' }}>
             <SaveButton />
             <DeleteButton mutationMode="optimistic" />
         </Toolbar>
@@ -44,89 +45,82 @@
     const translate = useTranslate();
 
     return (
-        <Edit
-            redirect="list"
-            mutationMode={EDIT_MODE}
-            actions={<CustomerTopToolBar />}
-            aside={<EditBaseAside />}
-        >
-            <SimpleForm
-                shouldUnregister
-                warnWhenUnsavedChanges
-                toolbar={<FormToolbar />}
-                mode="onTouched"
-                defaultValues={{}}
-            // validate={(values) => { }}
+        <>
+            <Edit
+                redirect="list"
+                mutationMode={EDIT_MODE}
+                actions={<CustomerTopToolBar />}
+                aside={<EditBaseAside />}
             >
-                <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}>
-                    <Grid item xs={12} md={8}>
-                        <Typography variant="h6" gutterBottom>
-                            {translate('common.edit.title.main')}
-                        </Typography>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.serialRule.code"
-                                source="code"
-                                parse={v => v}
-                                autoFocus
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.serialRule.name"
-                                source="name"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.serialRule.delimit"
-                                source="delimit"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.serialRule.reset"
-                                source="reset"
-                                parse={v => v}
-                                validate={required()}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.serialRule.resetDep"
-                                source="resetDep"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.serialRule.currValue"
-                                source="currValue"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.serialRule.lastCode"
-                                source="lastCode"
-                                parse={v => v}
-                            />
-                        </Stack>
+                <SimpleForm
+                    shouldUnregister
+                    warnWhenUnsavedChanges
+                    toolbar={<FormToolbar />}
+                    mode="onTouched"
+                    defaultValues={{}}
+                // validate={(values) => { }}
+                >
+                    <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}>
+                        <Grid item xs={12} md={8}>
+                            <Typography variant="h6" gutterBottom>
+                                {translate('common.edit.title.main')}
+                            </Typography>
+                            <Stack direction='row' gap={2}>
+                                <TextInput
+                                    label="table.field.serialRule.code"
+                                    source="code"
+                                    parse={v => v}
+                                    readOnly
+                                />
+                                <TextInput
+                                    label="table.field.serialRule.name"
+                                    source="name"
+                                    parse={v => v}
+                                />
+                                <TextInput
+                                    label="table.field.serialRule.delimit"
+                                    source="delimit"
+                                    parse={v => v}
+                                />
+                            </Stack>
+                            <Stack direction='row' gap={2}>
+                                <TextInput
+                                    label="table.field.serialRule.reset"
+                                    source="reset"
+                                    parse={v => v}
+                                    validate={required()}
+                                />
+                                <TextInput
+                                    label="table.field.serialRule.resetDep"
+                                    source="resetDep"
+                                    parse={v => v}
+                                />
+                                <TextInput
+                                    label="table.field.serialRule.currValue"
+                                    source="currValue"
+                                    parse={v => v}
+                                />
+                                <TextInput
+                                    label="table.field.serialRule.lastCode"
+                                    source="lastCode"
+                                    parse={v => v}
+                                />
+                            </Stack>
 
+                        </Grid>
+                        <Grid item xs={12} md={4}>
+                            <Typography variant="h6" gutterBottom>
+                                {translate('common.edit.title.common')}
+                            </Typography>
+                            <StatusSelectInput />
+                            <Box mt="2em" />
+                            <MemoInput />
+                        </Grid>
                     </Grid>
-                    <Grid item xs={12} md={4}>
-                        <Typography variant="h6" gutterBottom>
-                            {translate('common.edit.title.common')}
-                        </Typography>
-                        <StatusSelectInput />
-                        <Box mt="2em" />
-                        <MemoInput />
-                    </Grid>
-                </Grid>
-            </SimpleForm>
-        </Edit >
+                </SimpleForm>
+            </Edit >
+            <SerialRuleItemList></SerialRuleItemList>
+        </>
     )
 }
 
diff --git a/rsf-admin/src/page/system/serialRule/SerialRuleItemCreate.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleItemCreate.jsx
new file mode 100644
index 0000000..f51326e
--- /dev/null
+++ b/rsf-admin/src/page/system/serialRule/SerialRuleItemCreate.jsx
@@ -0,0 +1,151 @@
+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,
+} from 'react-admin';
+import {
+    Dialog,
+    DialogActions,
+    DialogContent,
+    DialogTitle,
+    Stack,
+    Grid,
+    Box,
+} from '@mui/material';
+import DialogCloseButton from "../../components/DialogCloseButton";
+import StatusSelectInput from "../../components/StatusSelectInput";
+import MemoInput from "../../components/MemoInput";
+
+const SerialRuleItemCreate = (props) => {
+    const { open, setOpen } = props;
+
+    const translate = useTranslate();
+    const notify = useNotify();
+
+    const handleClose = (event, reason) => {
+        if (reason !== "backdropClick") {
+            setOpen(false);
+        }
+    };
+
+    const handleSuccess = async (data) => {
+        setOpen(false);
+        notify('common.response.success');
+    };
+
+    const handleError = async (error) => {
+        notify(error.message || 'common.response.fail', { type: 'error', messageArgs: { _: error.message } });
+    };
+
+    return (
+        <>
+            <CreateBase
+                record={{}}
+                transform={(data) => {
+                    return data;
+                }}
+                mutationOptions={{ onSuccess: handleSuccess, onError: handleError }}
+            >
+                <Dialog
+                    open={open}
+                    onClose={handleClose}
+                    aria-labelledby="form-dialog-title"
+                    fullWidth
+                    disableRestoreFocus
+                    maxWidth="md"   // 'xs' | 'sm' | 'md' | 'lg' | 'xl'
+                >
+                    <Form>
+                        <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 }}>
+                            <Grid container rowSpacing={2} columnSpacing={2}>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <NumberInput
+                                        label="table.field.serialRuleItem.ruleId"
+                                        source="ruleId"
+                                        autoFocus
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <TextInput
+                                        label="table.field.serialRuleItem.wkType"
+                                        source="wkType"
+                                        parse={v => v}
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <TextInput
+                                        label="table.field.serialRuleItem.feildValue"
+                                        source="feildValue"
+                                        parse={v => v}
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <NumberInput
+                                        label="table.field.serialRuleItem.len"
+                                        source="len"
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <NumberInput
+                                        label="table.field.serialRuleItem.lenStr"
+                                        source="lenStr"
+                                        validate={required()}
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <NumberInput
+                                        label="table.field.serialRuleItem.sort"
+                                        source="sort"
+                                        validate={required()}
+                                    />
+                                </Grid>
+
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <StatusSelectInput />
+                                </Grid>
+                                <Grid item xs={12} display="flex" gap={1}>
+                                    <Stack direction="column" spacing={1} width={'100%'}>
+                                        <MemoInput />
+                                    </Stack>
+                                </Grid>
+                            </Grid>
+                        </DialogContent>
+                        <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}>
+                            <Toolbar sx={{ width: '100%', justifyContent: 'space-between' }}  >
+                                <SaveButton />
+                            </Toolbar>
+                        </DialogActions>
+                    </Form>
+                </Dialog>
+            </CreateBase>
+        </>
+    )
+}
+
+export default SerialRuleItemCreate;
diff --git a/rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx
new file mode 100644
index 0000000..c99a1bc
--- /dev/null
+++ b/rsf-admin/src/page/system/serialRule/SerialRuleItemList.jsx
@@ -0,0 +1,225 @@
+import React, {
+  useState,
+  useRef,
+  useEffect,
+  useMemo,
+  useCallback,
+} from "react";
+import { useNavigate, useLocation } from "react-router-dom";
+import {
+  List,
+  DatagridConfigurable,
+  SearchInput,
+  TopToolbar,
+  SelectColumnsButton,
+  EditButton,
+  FilterButton,
+  CreateButton,
+  ExportButton,
+  BulkDeleteButton,
+  WrapperField,
+  useRecordContext,
+  useTranslate,
+  useNotify,
+  useListContext,
+  FunctionField,
+  TextField,
+  NumberField,
+  DateField,
+  BooleanField,
+  ReferenceField,
+  TextInput,
+  DateTimeInput,
+  DateInput,
+  SelectInput,
+  NumberInput,
+  ReferenceInput,
+  ReferenceArrayInput,
+  AutocompleteInput,
+  DeleteButton,
+  useGetRecordId,
+} from "react-admin";
+import { Box, Typography, Card, Stack } from "@mui/material";
+import { styled } from "@mui/material/styles";
+import SerialRuleItemCreate from "./SerialRuleItemCreate";
+import EmptyData from "../../components/EmptyData";
+import MyCreateButton from "../../components/MyCreateButton";
+import MyExportButton from "../../components/MyExportButton";
+import PageDrawer from "../../components/PageDrawer";
+import MyField from "../../components/MyField";
+import {
+  PAGE_DRAWER_WIDTH,
+  OPERATE_MODE,
+  DEFAULT_PAGE_SIZE,
+} from "@/config/setting";
+import * as Common from "@/utils/common";
+import CustomerTopToolBar from "../../components/EditTopToolBar";
+
+const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
+  "& .css-1vooibu-MuiSvgIcon-root": {
+    height: ".9em",
+  },
+  "& .RaDatagrid-row": {
+    cursor: "auto",
+  },
+  "& .column-name": {},
+  "& .opt": {
+    width: 200,
+  },
+}));
+
+const filters = [
+  <SearchInput source="condition" alwaysOn />,
+  <DateInput label="common.time.after" source="timeStart" />,
+  <DateInput label="common.time.before" source="timeEnd" />,
+  <NumberInput source="ruleId" label="table.field.serialRuleItem.ruleId" />,
+  <TextInput source="wkType" label="table.field.serialRuleItem.wkType" />,
+  <TextInput source="feildValue" label="table.field.serialRuleItem.feildValue" />,
+  <NumberInput source="len" label="table.field.serialRuleItem.len" />,
+  <NumberInput source="lenStr" label="table.field.serialRuleItem.lenStr" />,
+  <NumberInput source="sort" label="table.field.serialRuleItem.sort" />,
+  <TextInput label="common.field.memo" source="memo" />,
+  <SelectInput
+    label="common.field.status"
+    source="status"
+    choices={[
+      { id: "1", name: "common.enums.statusTrue" },
+      { id: "0", name: "common.enums.statusFalse" },
+    ]}
+    resettable
+  />,
+];
+
+const SerialRuleItemList = () => {
+  const translate = useTranslate();
+  const [createDialog, setCreateDialog] = useState(false);
+  const [drawerVal, setDrawerVal] = useState(false);
+  const ruleId = useGetRecordId();
+
+  return (
+    <>
+      <Box display="flex">
+        <List
+          resource="serialRuleItem"
+          sx={{
+            flexGrow: 1,
+            transition: (theme) =>
+              theme.transitions.create(["all"], {
+                duration: theme.transitions.duration.enteringScreen,
+              }),
+            marginRight: drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
+          }}
+          title={"menu.serialRuleItem"}
+          empty={
+            <EmptyData
+              onClick={() => {
+                setCreateDialog(true);
+              }}
+            />
+          }
+          filters={filters}
+          filter={{ ruleId: ruleId }}
+          sort={{ field: "create_time", order: "desc" }}
+          actions={
+            <TopToolbar>
+              <FilterButton />
+              <MyCreateButton
+                onClick={() => {
+                  setCreateDialog(true);
+                }}
+              />
+              <SelectColumnsButton preferenceKey="serialRuleItem" />
+              <MyExportButton />
+            </TopToolbar>
+          }
+          perPage={DEFAULT_PAGE_SIZE}
+        >
+          <StyledDatagrid
+            preferenceKey="serialRuleItem"
+            bulkActionButtons={() => (
+              <BulkDeleteButton mutationMode={OPERATE_MODE} />
+            )}
+            rowClick={false}
+            omit={["id", "createTime", "createBy", "memo"]}
+          >
+            <NumberField source="id" />
+            <NumberField
+              source="ruleId"
+              label="table.field.serialRuleItem.ruleId"
+            />
+            <TextField
+              source="wkType$"
+              label="table.field.serialRuleItem.wkType"
+            />
+            <TextField
+              source="feildValue"
+              label="table.field.serialRuleItem.feildValue"
+            />
+            <NumberField source="len" label="table.field.serialRuleItem.len" />
+            <NumberField
+              source="lenStr"
+              label="table.field.serialRuleItem.lenStr"
+            />
+            <NumberField
+              source="sort"
+              label="table.field.serialRuleItem.sort"
+            />
+            <ReferenceField
+              source="updateBy"
+              label="common.field.updateBy"
+              reference="user"
+              link={false}
+              sortable={false}
+            >
+              <TextField source="nickname" />
+            </ReferenceField>
+            <DateField
+              source="updateTime"
+              label="common.field.updateTime"
+              showTime
+            />
+            <ReferenceField
+              source="createBy"
+              label="common.field.createBy"
+              reference="user"
+              link={false}
+              sortable={false}
+            >
+              <TextField source="nickname" />
+            </ReferenceField>
+            <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}
+            />
+            <WrapperField cellClassName="opt" label="common.field.opt">
+              <EditButton sx={{ padding: "1px", fontSize: ".75rem" }} />
+              <DeleteButton
+                sx={{ padding: "1px", fontSize: ".75rem" }}
+                mutationMode={OPERATE_MODE}
+              />
+            </WrapperField>
+          </StyledDatagrid>
+        </List>
+        <SerialRuleItemCreate open={createDialog} setOpen={setCreateDialog} />
+        <PageDrawer
+          title="SerialRuleItem Detail"
+          drawerVal={drawerVal}
+          setDrawerVal={setDrawerVal}
+        ></PageDrawer>
+      </Box>
+    </>
+  );
+};
+
+export default SerialRuleItemList;
diff --git a/rsf-admin/src/page/system/serialRule/SerialRuleList.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleList.jsx
index 6008fab..8b4c623 100644
--- a/rsf-admin/src/page/system/serialRule/SerialRuleList.jsx
+++ b/rsf-admin/src/page/system/serialRule/SerialRuleList.jsx
@@ -72,7 +72,6 @@
   <SearchInput source="condition" alwaysOn />,
   <DateInput label="common.time.after" source="timeStart" alwaysOn />,
   <DateInput label="common.time.before" source="timeEnd" alwaysOn />,
-
   <TextInput source="code" label="table.field.serialRule.code" />,
   <TextInput source="name" label="table.field.serialRule.name" />,
   <TextInput source="delimit" label="table.field.serialRule.delimit" />,
@@ -100,10 +99,10 @@
   const [drawerVal, setDrawerVal] = useState(false);
   const [detailDialog, setDetailDialog] = useState(false);
 
-  const navigate = useNavigate();
-  const assign = (record) => {
-    navigate(`/serialRuleItem?ruleId=${record.id}`);
-  };
+  // const navigate = useNavigate();
+  // const assign = (record) => {
+  //   navigate(`/serialRuleItem?ruleId=${record.id}`);
+  // };
 
   return (
     <Box display="flex">
@@ -145,26 +144,11 @@
           bulkActionButtons={() => (
             <BulkDeleteButton mutationMode={OPERATE_MODE} />
           )}
-          rowClick={(id, resource, record) => false}
+          rowClick={'edit'}
           omit={["id", "createTime", "createBy", "memo"]}
         >
           <NumberField source="id" />
-          <MyField
-            source="code"
-            label="table.field.serialRule.code"
-            onClick={(event, record, val) => {
-              event.stopPropagation();
-              assign(record);
-            }}
-          />
-          {/* <MyField
-            source="code"
-            label="table.field.serialRule.code"
-            onClick={() => {
-              setDetailDialog(true);
-            }}
-          /> */}
-
+          <TextField source="code" label="table.field.serialRule.code" />
           <TextField source="name" label="table.field.serialRule.name" />
           <TextField source="delimit" label="table.field.serialRule.delimit" />
           <TextField source="reset" label="table.field.serialRule.reset" />
diff --git a/rsf-admin/src/page/task/TaskList.jsx b/rsf-admin/src/page/task/TaskList.jsx
index dc8eceb..7f6cce0 100644
--- a/rsf-admin/src/page/task/TaskList.jsx
+++ b/rsf-admin/src/page/task/TaskList.jsx
@@ -8,33 +8,22 @@
     SearchInput,
     TopToolbar,
     SelectColumnsButton,
-    EditButton,
     FilterButton,
-    CreateButton,
-    ExportButton,
     BulkDeleteButton,
     WrapperField,
     useRecordContext,
     useTranslate,
     useNotify,
     useRefresh,
-    useDataProvider,
-    useListContext,
-    FunctionField,
     TextField,
     NumberField,
     DateField,
     BooleanField,
-    ReferenceField,
     TextInput,
-    DateTimeInput,
     DateInput,
     SelectInput,
     NumberInput,
-    ReferenceInput,
-    ReferenceArrayInput,
-    AutocompleteInput,
-    DeleteButton,
+
     Button,
 } from 'react-admin';
 import { Box, Typography, Card, Stack, Drawer } from '@mui/material';
@@ -100,9 +89,7 @@
 
 const TaskList = () => {
     const translate = useTranslate();
-    const [createDialog, setCreateDialog] = useState(false);
     const [drawerVal, setDrawerVal] = useState(false);
-    const [data, setData] = useState([]);    
     return (
         <Box display="flex">
             <List
diff --git a/rsf-admin/src/page/task/TaskPanel.jsx b/rsf-admin/src/page/task/TaskPanel.jsx
index a207d24..6207229 100644
--- a/rsf-admin/src/page/task/TaskPanel.jsx
+++ b/rsf-admin/src/page/task/TaskPanel.jsx
@@ -48,7 +48,7 @@
                         marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
                     }}
                     filter={{ taskId: record.id }}
-                    title={"menu.taskItem"}
+                    // title={"menu.taskItem"}
                     pagination={false}
                     empty={false}
                     actions={false}
@@ -77,7 +77,6 @@
                         <TextField source="createBy$" label="common.field.createBy"/>
                         <DateField source="updateTime" label="common.field.updateTime" showTime />
                         <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>
diff --git a/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogCreate.jsx b/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogCreate.jsx
deleted file mode 100644
index 0ee7ce6..0000000
--- a/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogCreate.jsx
+++ /dev/null
@@ -1,220 +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,
-} from 'react-admin';
-import {
-    Dialog,
-    DialogActions,
-    DialogContent,
-    DialogTitle,
-    Stack,
-    Grid,
-    Box,
-} from '@mui/material';
-import DialogCloseButton from "../components/DialogCloseButton";
-import StatusSelectInput from "../components/StatusSelectInput";
-import MemoInput from "../components/MemoInput";
-
-const WaitPakinItemLogCreate = (props) => {
-    const { open, setOpen } = props;
-
-    const translate = useTranslate();
-    const notify = useNotify();
-
-    const handleClose = (event, reason) => {
-        if (reason !== "backdropClick") {
-            setOpen(false);
-        }
-    };
-
-    const handleSuccess = async (data) => {
-        setOpen(false);
-        notify('common.response.success');
-    };
-
-    const handleError = async (error) => {
-        notify(error.message || 'common.response.fail', { type: 'error', messageArgs: { _: error.message } });
-    };
-
-    return (
-        <>
-            <CreateBase
-                record={{}}
-                transform={(data) => {
-                    return data;
-                }}
-                mutationOptions={{ onSuccess: handleSuccess, onError: handleError }}
-            >
-                <Dialog
-                    open={open}
-                    onClose={handleClose}
-                    aria-labelledby="form-dialog-title"
-                    fullWidth
-                    disableRestoreFocus
-                    maxWidth="md"   // 'xs' | 'sm' | 'md' | 'lg' | 'xl'
-                >
-                    <Form>
-                        <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 }}>
-                            <Grid container rowSpacing={2} columnSpacing={2}>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <ReferenceInput
-                                        source="pakinId"
-                                        reference="waitPakin"
-                                        autoFocus
-                                    >
-                                        <AutocompleteInput
-                                            label="table.field.waitPakinItemLog.pakinId"
-                                            optionText="id"
-                                            filterToQuery={(val) => ({ id: val })}
-                                        />
-                                    </ReferenceInput>
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <NumberInput
-                                        label="table.field.waitPakinItemLog.pakinItemId"
-                                        source="pakinItemId"
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <NumberInput
-                                        label="table.field.waitPakinItemLog.asnId"
-                                        source="asnId"
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <TextInput
-                                        label="table.field.waitPakinItemLog.asnCode"
-                                        source="asnCode"
-                                        parse={v => v}
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <NumberInput
-                                        label="table.field.waitPakinItemLog.asnItemId"
-                                        source="asnItemId"
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <TextInput
-                                        label="table.field.waitPakinItemLog.trackCode"
-                                        source="trackCode"
-                                        parse={v => v}
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <TextInput
-                                        label="table.field.waitPakinItemLog.maktx"
-                                        source="maktx"
-                                        parse={v => v}
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <ReferenceInput
-                                        source="matnrId"
-                                        reference="matnr"
-                                    >
-                                        <AutocompleteInput
-                                            label="table.field.waitPakinItemLog.matnrId"
-                                            optionText="unit"
-                                            filterToQuery={(val) => ({ unit: val })}
-                                        />
-                                    </ReferenceInput>
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <TextInput
-                                        label="table.field.waitPakinItemLog.matnrCode"
-                                        source="matnrCode"
-                                        parse={v => v}
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <NumberInput
-                                        label="table.field.waitPakinItemLog.anfme"
-                                        source="anfme"
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <NumberInput
-                                        label="table.field.waitPakinItemLog.workQty"
-                                        source="workQty"
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <TextInput
-                                        label="table.field.waitPakinItemLog.unit"
-                                        source="unit"
-                                        parse={v => v}
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <TextInput
-                                        label="table.field.waitPakinItemLog.fieldsIndex"
-                                        source="fieldsIndex"
-                                        parse={v => v}
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <NumberInput
-                                        label="table.field.waitPakinItemLog.qty"
-                                        source="qty"
-                                    />
-                                </Grid>
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <TextInput
-                                        label="table.field.waitPakinItemLog.batch"
-                                        source="batch"
-                                        parse={v => v}
-                                    />
-                                </Grid>
-
-                                <Grid item xs={6} display="flex" gap={1}>
-                                    <StatusSelectInput />
-                                </Grid>
-                                <Grid item xs={12} display="flex" gap={1}>
-                                    <Stack direction="column" spacing={1} width={'100%'}>
-                                        <MemoInput />
-                                    </Stack>
-                                </Grid>
-                            </Grid>
-                        </DialogContent>
-                        <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}>
-                            <Toolbar sx={{ width: '100%', justifyContent: 'space-between' }}  >
-                                <SaveButton />
-                            </Toolbar>
-                        </DialogActions>
-                    </Form>
-                </Dialog>
-            </CreateBase>
-        </>
-    )
-}
-
-export default WaitPakinItemLogCreate;
diff --git a/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogEdit.jsx b/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogEdit.jsx
deleted file mode 100644
index 80599c0..0000000
--- a/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogEdit.jsx
+++ /dev/null
@@ -1,194 +0,0 @@
-import React, { useState, useRef, useEffect, useMemo } from "react";
-import {
-    Edit,
-    SimpleForm,
-    FormDataConsumer,
-    useTranslate,
-    TextInput,
-    NumberInput,
-    BooleanInput,
-    DateInput,
-    SelectInput,
-    ReferenceInput,
-    ReferenceArrayInput,
-    AutocompleteInput,
-    SaveButton,
-    Toolbar,
-    Labeled,
-    NumberField,
-    required,
-    useRecordContext,
-    DeleteButton,
-} from 'react-admin';
-import { useWatch, useFormContext } from "react-hook-form";
-import { Stack, Grid, Box, Typography } from '@mui/material';
-import * as Common from '@/utils/common';
-import { EDIT_MODE, REFERENCE_INPUT_PAGESIZE } from '@/config/setting';
-import EditBaseAside from "../components/EditBaseAside";
-import CustomerTopToolBar from "../components/EditTopToolBar";
-import MemoInput from "../components/MemoInput";
-import StatusSelectInput from "../components/StatusSelectInput";
-
-const FormToolbar = () => {
-    const { getValues } = useFormContext();
-
-    return (
-        <Toolbar sx={{ justifyContent: 'space-between' }}>
-            <SaveButton />
-            <DeleteButton mutationMode="optimistic" />
-        </Toolbar>
-    )
-}
-
-const WaitPakinItemLogEdit = () => {
-    const translate = useTranslate();
-
-    return (
-        <Edit
-            redirect="list"
-            mutationMode={EDIT_MODE}
-            actions={<CustomerTopToolBar />}
-            aside={<EditBaseAside />}
-        >
-            <SimpleForm
-                shouldUnregister
-                warnWhenUnsavedChanges
-                toolbar={<FormToolbar />}
-                mode="onTouched"
-                defaultValues={{}}
-            // validate={(values) => { }}
-            >
-                <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}>
-                    <Grid item xs={12} md={8}>
-                        <Typography variant="h6" gutterBottom>
-                            {translate('common.edit.title.main')}
-                        </Typography>
-                        <Stack direction='row' gap={2}>
-                            <ReferenceInput
-                                source="pakinId"
-                                reference="waitPakin"
-                                perPage={REFERENCE_INPUT_PAGESIZE}
-                                autoFocus
-                            >
-                                <AutocompleteInput
-                                    label="table.field.waitPakinItemLog.pakinId"
-                                    optionText="id"
-                                    filterToQuery={(val) => ({ id: val })}
-                                />
-                            </ReferenceInput>
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.waitPakinItemLog.pakinItemId"
-                                source="pakinItemId"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.waitPakinItemLog.asnId"
-                                source="asnId"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.waitPakinItemLog.asnCode"
-                                source="asnCode"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.waitPakinItemLog.asnItemId"
-                                source="asnItemId"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.waitPakinItemLog.trackCode"
-                                source="trackCode"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.waitPakinItemLog.maktx"
-                                source="maktx"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <ReferenceInput
-                                source="matnrId"
-                                reference="matnr"
-                                perPage={REFERENCE_INPUT_PAGESIZE}
-                            >
-                                <AutocompleteInput
-                                    label="table.field.waitPakinItemLog.matnrId"
-                                    optionText="unit"
-                                    filterToQuery={(val) => ({ unit: val })}
-                                />
-                            </ReferenceInput>
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.waitPakinItemLog.matnrCode"
-                                source="matnrCode"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.waitPakinItemLog.anfme"
-                                source="anfme"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.waitPakinItemLog.workQty"
-                                source="workQty"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.waitPakinItemLog.unit"
-                                source="unit"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.waitPakinItemLog.fieldsIndex"
-                                source="fieldsIndex"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.waitPakinItemLog.qty"
-                                source="qty"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.waitPakinItemLog.batch"
-                                source="batch"
-                                parse={v => v}
-                            />
-                        </Stack>
-
-                    </Grid>
-                    <Grid item xs={12} md={4}>
-                        <Typography variant="h6" gutterBottom>
-                            {translate('common.edit.title.common')}
-                        </Typography>
-                        <StatusSelectInput />
-                        <Box mt="2em" />
-                        <MemoInput />
-                    </Grid>
-                </Grid>
-            </SimpleForm>
-        </Edit >
-    )
-}
-
-export default WaitPakinItemLogEdit;
diff --git a/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogPanel.jsx b/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogPanel.jsx
deleted file mode 100644
index 8bb4f7e..0000000
--- a/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogPanel.jsx
+++ /dev/null
@@ -1,141 +0,0 @@
-import React, { useState, useRef, useEffect, useMemo } from "react";
-import { Box, Card, CardContent, Grid, Typography, Tooltip } from '@mui/material';
-import {
-    useTranslate,
-    useRecordContext,
-} from 'react-admin';
-import PanelTypography from "../components/PanelTypography";
-import * as Common from '@/utils/common'
-
-const WaitPakinItemLogPanel = () => {
-    const record = useRecordContext();
-    if (!record) return null;
-    const translate = useTranslate();
-    return (
-        <>
-            <Card sx={{ width: { xs: 300, sm: 500, md: 600, lg: 800 }, margin: 'auto' }}>
-                <CardContent>
-                    <Grid container spacing={2}>
-                        <Grid item xs={12} sx={{ display: 'flex', justifyContent: 'space-between' }}>
-                            <Typography variant="h6" gutterBottom align="left" sx={{
-                                maxWidth: { xs: '100px', sm: '180px', md: '260px', lg: '360px' },
-                                whiteSpace: 'nowrap',
-                                overflow: 'hidden',
-                                textOverflow: 'ellipsis',
-                            }}>
-                                {Common.camelToPascalWithSpaces(translate('table.field.waitPakinItemLog.id'))}: {record.id}
-                            </Typography>
-                            {/*  inherit, primary, secondary, textPrimary, textSecondary, error */}
-                            <Typography variant="h6" gutterBottom align="right" >
-                                ID: {record.id}
-                            </Typography>
-                        </Grid>
-                    </Grid>
-                    <Grid container spacing={2}>
-                        <Grid item xs={12} container alignContent="flex-end">
-                            <Typography variant="caption" color="textSecondary" sx={{ wordWrap: 'break-word', wordBreak: 'break-all' }}>
-                                {Common.camelToPascalWithSpaces(translate('common.field.memo'))}:{record.memo}
-                            </Typography>
-                        </Grid>
-                    </Grid>
-                    <Box height={20}>&nbsp;</Box>
-                    <Grid container spacing={2}>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.waitPakinItemLog.pakinId" 
-                                property={record.pakinId$}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.waitPakinItemLog.pakinItemId" 
-                                property={record.pakinItemId}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.waitPakinItemLog.asnId" 
-                                property={record.asnId}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.waitPakinItemLog.asnCode" 
-                                property={record.asnCode}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.waitPakinItemLog.asnItemId" 
-                                property={record.asnItemId}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.waitPakinItemLog.trackCode" 
-                                property={record.trackCode}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.waitPakinItemLog.maktx" 
-                                property={record.maktx}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.waitPakinItemLog.matnrId" 
-                                property={record.matnrId$}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.waitPakinItemLog.matnrCode" 
-                                property={record.matnrCode}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.waitPakinItemLog.anfme" 
-                                property={record.anfme}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.waitPakinItemLog.workQty" 
-                                property={record.workQty}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.waitPakinItemLog.unit" 
-                                property={record.unit}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.waitPakinItemLog.fieldsIndex" 
-                                property={record.fieldsIndex}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.waitPakinItemLog.qty" 
-                                property={record.qty}
-                            />
-                        </Grid>
-                        <Grid item xs={6}>
-                            <PanelTypography
-                                title="table.field.waitPakinItemLog.batch" 
-                                property={record.batch}
-                            />
-                        </Grid>
-
-                    </Grid>
-                </CardContent>
-            </Card >
-        </>
-    );
-};
-
-export default WaitPakinItemLogPanel;
diff --git a/rsf-admin/src/page/waitPakinItemLog/index.jsx b/rsf-admin/src/page/waitPakinItemLog/index.jsx
deleted file mode 100644
index 52cacba..0000000
--- a/rsf-admin/src/page/waitPakinItemLog/index.jsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import React, { useState, useRef, useEffect, useMemo } from "react";
-import {
-    ListGuesser,
-    EditGuesser,
-    ShowGuesser,
-} from "react-admin";
-
-import WaitPakinItemLogList from "./WaitPakinItemLogList";
-import WaitPakinItemLogEdit from "./WaitPakinItemLogEdit";
-
-export default {
-    list: WaitPakinItemLogList,
-    edit: WaitPakinItemLogEdit,
-    show: ShowGuesser,
-    recordRepresentation: (record) => {
-        return `${record.id}`
-    }
-};
diff --git a/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogList.jsx b/rsf-admin/src/page/waitPakinLog/WaitPakinItemLogList.jsx
similarity index 84%
rename from rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogList.jsx
rename to rsf-admin/src/page/waitPakinLog/WaitPakinItemLogList.jsx
index 767197a..31b2e7d 100644
--- a/rsf-admin/src/page/waitPakinItemLog/WaitPakinItemLogList.jsx
+++ b/rsf-admin/src/page/waitPakinLog/WaitPakinItemLogList.jsx
@@ -31,12 +31,10 @@
     ReferenceArrayInput,
     AutocompleteInput,
     DeleteButton,
+    useGetRecordId,
 } from 'react-admin';
 import { Box, Typography, Card, Stack } from '@mui/material';
-import { styled } from '@mui/material/styles';
-import WaitPakinItemLogCreate from "./WaitPakinItemLogCreate";
-import WaitPakinItemLogPanel from "./WaitPakinItemLogPanel";
-import EmptyData from "../components/EmptyData";
+import { styled } from '@mui/material/styles'; import EmptyData from "../components/EmptyData";
 import MyCreateButton from "../components/MyCreateButton";
 import MyExportButton from '../components/MyExportButton';
 import PageDrawer from "../components/PageDrawer";
@@ -60,7 +58,6 @@
 
 const filters = [
     <SearchInput source="condition" alwaysOn />,
-
     <ReferenceInput source="pakinId" label="table.field.waitPakinItemLog.pakinId" reference="waitPakin">
         <AutocompleteInput label="table.field.waitPakinItemLog.pakinId" optionText="id" filterToQuery={(val) => ({ id: val })} />
     </ReferenceInput>,
@@ -80,7 +77,6 @@
     <TextInput source="fieldsIndex" label="table.field.waitPakinItemLog.fieldsIndex" />,
     <NumberInput source="qty" label="table.field.waitPakinItemLog.qty" />,
     <TextInput source="batch" label="table.field.waitPakinItemLog.batch" />,
-
     <TextInput label="common.field.memo" source="memo" />,
     <SelectInput
         label="common.field.status"
@@ -95,13 +91,14 @@
 
 const WaitPakinItemLogList = () => {
     const translate = useTranslate();
-
     const [createDialog, setCreateDialog] = useState(false);
     const [drawerVal, setDrawerVal] = useState(false);
+    const recordId = useGetRecordId();
 
     return (
         <Box display="flex">
             <List
+                resource="waitPakinItemLog"
                 sx={{
                     flexGrow: 1,
                     transition: (theme) =>
@@ -113,11 +110,11 @@
                 title={"menu.waitPakinItemLog"}
                 empty={<EmptyData onClick={() => { setCreateDialog(true) }} />}
                 filters={filters}
+                filter={{ logId: recordId }}
                 sort={{ field: "create_time", order: "desc" }}
                 actions={(
                     <TopToolbar>
                         <FilterButton />
-                        <MyCreateButton onClick={() => { setCreateDialog(true) }} />
                         <SelectColumnsButton preferenceKey='waitPakinItemLog' />
                         <MyExportButton />
                     </TopToolbar>
@@ -127,8 +124,8 @@
                 <StyledDatagrid
                     preferenceKey='waitPakinItemLog'
                     bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
-                    rowClick={(id, resource, record) => false}
-                    omit={['id', 'createTime', 'createBy', 'memo']}
+                    rowClick={ false}
+                    omit={['id', 'createTime', 'createBy', 'memo', 'pakinId', 'pakinItemId', 'asnId' ,'asnItemId', 'createBy$', 'fieldsIndex']}
                 >
                     <NumberField source="id" />
                     <ReferenceField source="pakinId" label="table.field.waitPakinItemLog.pakinId" reference="waitPakin" link={false} sortable={false}>
@@ -150,27 +147,14 @@
                     <TextField source="fieldsIndex" label="table.field.waitPakinItemLog.fieldsIndex" />
                     <NumberField source="qty" label="table.field.waitPakinItemLog.qty" />
                     <TextField source="batch" label="table.field.waitPakinItemLog.batch" />
-
-                    <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}>
-                        <TextField source="nickname" />
-                    </ReferenceField>
+                    <TextField source="updateBy$" label="common.field.updateBy" />
                     <DateField source="updateTime" label="common.field.updateTime" showTime />
-                    <ReferenceField source="createBy" label="common.field.createBy" reference="user" link={false} sortable={false}>
-                        <TextField source="nickname" />
-                    </ReferenceField>
+                    <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} />
-                    <WrapperField cellClassName="opt" label="common.field.opt">
-                        <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} />
-                        <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} />
-                    </WrapperField>
                 </StyledDatagrid>
             </List>
-            <WaitPakinItemLogCreate
-                open={createDialog}
-                setOpen={setCreateDialog}
-            />
             <PageDrawer
                 title='WaitPakinItemLog Detail'
                 drawerVal={drawerVal}
diff --git a/rsf-admin/src/page/waitPakinLog/WaitPakinLogEdit.jsx b/rsf-admin/src/page/waitPakinLog/WaitPakinLogEdit.jsx
index 3570c73..ac2350e 100644
--- a/rsf-admin/src/page/waitPakinLog/WaitPakinLogEdit.jsx
+++ b/rsf-admin/src/page/waitPakinLog/WaitPakinLogEdit.jsx
@@ -28,12 +28,13 @@
 import CustomerTopToolBar from "../components/EditTopToolBar";
 import MemoInput from "../components/MemoInput";
 import StatusSelectInput from "../components/StatusSelectInput";
+import WaitPakinItemLogList from "./WaitPakinItemLogList";
 
 const FormToolbar = () => {
     const { getValues } = useFormContext();
 
     return (
-        <Toolbar sx={{ justifyContent: 'space-between' }}>
+        <Toolbar sx={{ justifyContent: 'end' }}>
             <SaveButton />
             <DeleteButton mutationMode="optimistic" />
         </Toolbar>
@@ -44,76 +45,62 @@
     const translate = useTranslate();
 
     return (
-        <Edit
-            redirect="list"
-            mutationMode={EDIT_MODE}
-            actions={<CustomerTopToolBar />}
-            aside={<EditBaseAside />}
-        >
-            <SimpleForm
-                shouldUnregister
-                warnWhenUnsavedChanges
-                toolbar={<FormToolbar />}
-                mode="onTouched"
-                defaultValues={{}}
-            // validate={(values) => { }}
+        <>
+            <Edit
+                redirect="list"
+                mutationMode={EDIT_MODE}
+                actions={<CustomerTopToolBar />}
+                aside={<EditBaseAside />}
             >
-                <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}>
-                    <Grid item xs={12} md={8}>
-                        <Typography variant="h6" gutterBottom>
-                            {translate('common.edit.title.main')}
-                        </Typography>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.waitPakinLog.pakinId"
-                                source="pakinId"
-                                autoFocus
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.waitPakinLog.code"
-                                source="code"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <TextInput
-                                label="table.field.waitPakinLog.barcode"
-                                source="barcode"
-                                parse={v => v}
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <NumberInput
-                                label="table.field.waitPakinLog.anfme"
-                                source="anfme"
-                            />
-                        </Stack>
-                        <Stack direction='row' gap={2}>
-                            <SelectInput
-                                label="table.field.waitPakinLog.ioStatus"
-                                source="ioStatus"
-                                choices={[
-                                    { id: 0, name: '寰呭叆搴�' },
-                                    { id:  1, name: ' 鍏ュ簱涓�' },
-                                ]}
-                                validate={required()}
-                            />
-                        </Stack>
-
+                <SimpleForm
+                    shouldUnregister
+                    warnWhenUnsavedChanges
+                    toolbar={<FormToolbar />}
+                    mode="onTouched"
+                    defaultValues={{}}
+                // validate={(values) => { }}
+                >
+                    <Grid container width={{ xs: '100%', xl: '80%' }} rowSpacing={3} columnSpacing={3}>
+                        <Grid item xs={24} md={12}>
+                            <Typography variant="h6" gutterBottom>
+                                {translate('common.edit.title.main')}
+                            </Typography>
+                            <Stack direction='row' gap={2}>
+                                <NumberInput
+                                    label="table.field.waitPakinLog.pakinId"
+                                    source="pakinId"
+                                    autoFocus
+                                />
+                                <TextInput
+                                    label="table.field.waitPakinLog.code"
+                                    source="code"
+                                    parse={v => v}
+                                />
+                                <TextInput
+                                    label="table.field.waitPakinLog.barcode"
+                                    source="barcode"
+                                    parse={v => v}
+                                />
+                                <NumberInput
+                                    label="table.field.waitPakinLog.anfme"
+                                    source="anfme"
+                                />
+                                <SelectInput
+                                    label="table.field.waitPakinLog.ioStatus"
+                                    source="ioStatus"
+                                    choices={[
+                                        { id: 0, name: '寰呭叆搴�' },
+                                        { id: 1, name: ' 鍏ュ簱涓�' },
+                                    ]}
+                                    validate={required()}
+                                />
+                            </Stack>
+                        </Grid>
                     </Grid>
-                    <Grid item xs={12} md={4}>
-                        <Typography variant="h6" gutterBottom>
-                            {translate('common.edit.title.common')}
-                        </Typography>
-                        <StatusSelectInput />
-                        <Box mt="2em" />
-                        <MemoInput />
-                    </Grid>
-                </Grid>
-            </SimpleForm>
-        </Edit >
+                </SimpleForm>
+            </Edit >
+            <WaitPakinItemLogList />
+        </>
     )
 }
 
diff --git a/rsf-admin/src/page/waitPakinLog/WaitPakinLogList.jsx b/rsf-admin/src/page/waitPakinLog/WaitPakinLogList.jsx
index e9cb3f8..c689002 100644
--- a/rsf-admin/src/page/waitPakinLog/WaitPakinLogList.jsx
+++ b/rsf-admin/src/page/waitPakinLog/WaitPakinLogList.jsx
@@ -34,13 +34,9 @@
 } from 'react-admin';
 import { Box, Typography, Card, Stack } from '@mui/material';
 import { styled } from '@mui/material/styles';
-import WaitPakinLogCreate from "./WaitPakinLogCreate";
-import WaitPakinLogPanel from "./WaitPakinLogPanel";
 import EmptyData from "../components/EmptyData";
-import MyCreateButton from "../components/MyCreateButton";
 import MyExportButton from '../components/MyExportButton';
 import PageDrawer from "../components/PageDrawer";
-import MyField from "../components/MyField";
 import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
 import * as Common from '@/utils/common';
 
@@ -86,7 +82,6 @@
 
 const WaitPakinLogList = () => {
     const translate = useTranslate();
-
     const [createDialog, setCreateDialog] = useState(false);
     const [drawerVal, setDrawerVal] = useState(false);
 
@@ -108,7 +103,6 @@
                 actions={(
                     <TopToolbar>
                         <FilterButton />
-                        {/* <MyCreateButton onClick={() => { setCreateDialog(true) }} /> */}
                         <SelectColumnsButton preferenceKey='waitPakinLog' />
                         <MyExportButton />
                     </TopToolbar>
@@ -117,9 +111,9 @@
             >
                 <StyledDatagrid
                     preferenceKey='waitPakinLog'
-                    bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
-                    rowClick={(id, resource, record) => false}
-                    expand={() => <WaitPakinLogPanel />}
+                    bulkActionButtons={false}
+                    rowClick={'edit'}
+                    expand={false}
                     expandSingle={true}
                     omit={['id', 'createTime', 'createBy', 'memo']}
                 >
@@ -146,10 +140,6 @@
                     </WrapperField>
                 </StyledDatagrid>
             </List>
-            <WaitPakinLogCreate
-                open={createDialog}
-                setOpen={setCreateDialog}
-            />
             <PageDrawer
                 title='WaitPakinLog Detail'
                 drawerVal={drawerVal}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
index 3d93a98..0229436 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -248,7 +248,7 @@
                 throw new CoolException("閫氱煡鍗曟槑缁嗕笉瀛樺湪锛侊紒");
             }
             if (Objects.isNull(dto.getReceiptQty()) || Double.compare(dto.getReceiptQty(), 0.0) == 0) {
-                throw new CoolException("鏀惰揣鏁伴噺涓嶈兘涓洪浂锛侊紒");
+                throw new CoolException("鐗╂枡:" + dto.getMaktx() +  "鏀惰揣鏁伴噺涓嶈兘涓洪浂锛侊紒");
             }
             Double itemRcptQty = dto.getReceiptQty() + orderItem.getQty();
             orderItem.setQty(itemRcptQty)
@@ -291,7 +291,7 @@
                     .setWeight(dto.getWeigth())
                     .setStockUnit(dto.getStockUnit())
                     .setBatch(SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_RECEIPT_BATCH, dto))
-                    .setAnfme(itemRcptQty)
+                    .setAnfme(dto.getReceiptQty())
                     .setSplrBatch(dto.getSplrBatch())
                     .setMatnrCode(matnr.getCode())
                     .setMatnrId(matnr.getId())
@@ -738,6 +738,7 @@
      */
     @Override
     public R getItemByContainer(Map<String, Object> params) {
+        //鑾峰彇缁勬嫋鏈敓鎴愪换鍔$殑缁勬嫋妗�
         List<Short> asList = Arrays.asList(Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_DONE.val), Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_DONE.val));
         WaitPakin waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
                 .eq(WaitPakin::getBarcode, params.get("barcode").toString())
@@ -756,11 +757,16 @@
                 .lambda()
                 .in(WarehouseAreasItem::getTrackCode, list)
                 .groupBy(WarehouseAreasItem::getSplrBatch,
-                        WarehouseAreasItem::getAsnId,
-                        WarehouseAreasItem::getAreaId,
-                        WarehouseAreasItem::getTrackCode,
-                        WarehouseAreasItem::getMatnrId);
-        return R.ok(warehouseAreasItemService.list(queryWrapper));
+                        WarehouseAreasItem::getTrackCode);
+        List<WarehouseAreasItem> warehouseAreasItems = warehouseAreasItemService.list(queryWrapper);
+        for (int i = 0; i < warehouseAreasItems.size(); i++) {
+            for (WaitPakinItem pakinItem : pakinItems) {
+                if (warehouseAreasItems.get(i).getTrackCode().equals(pakinItem.getTrackCode())) {
+                    warehouseAreasItems.get(i).setAnfme(pakinItem.getAnfme());
+                }
+            }
+        }
+        return R.ok(warehouseAreasItems);
     }
 
     /**
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java
index d5ae471..d4b1461 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java
@@ -152,6 +152,10 @@
                 return "寰呭叆搴�";
             case  1:
                 return " 鍏ュ簱涓�";
+            case 2:
+                return "浠诲姟鎵ц涓�";
+            case 3:
+                return "浠诲姟瀹屾垚";
             default:
                 return String.valueOf(this.ioStatus);
         }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java
index 3018867..6870db3 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java
@@ -1,12 +1,14 @@
 package com.vincent.rsf.server.manager.service;
 
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.vincent.rsf.server.manager.entity.WarehouseAreasItem;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
-import java.util.Map;
 
 public interface WarehouseAreasItemService extends IService<WarehouseAreasItem> {
 
     List<WarehouseAreasItem> getList();
+
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java
index b50c28e..75bdb0e 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java
@@ -1,6 +1,7 @@
 package com.vincent.rsf.server.manager.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.vincent.rsf.framework.exception.CoolException;
 import com.vincent.rsf.server.manager.controller.params.PakinItem;
@@ -13,15 +14,13 @@
 import com.vincent.rsf.server.system.constant.SerialRuleCode;
 import com.vincent.rsf.server.system.utils.SerialRuleUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.parameters.P;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service("waitPakinService")
@@ -36,6 +35,8 @@
     private WaitPakinService waitPakinService;
     @Autowired
     private WaitPakinItemService waitPakinItemService;
+    @Autowired
+    private WarehouseAreasItemService warehouseAreasItemService;
     @Autowired
     private LocService locService;
 
@@ -55,52 +56,73 @@
         if (StringUtils.isBlank(waitPakin.getBarcode())) {
             throw new CoolException("鍙傛暟閿欒锛氭墭鐩樼爜涓虹┖锛侊紒");
         }
-
-        List<WaitPakin> list = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, waitPakin.getBarcode()));
-        if (!list.isEmpty()) {
-            List<String> stringList = list.stream().map(WaitPakin::getCode).collect(Collectors.toList());
-            String join = StringUtils.join(stringList, ",");
-            throw new CoolException("鎷栫洏鐮侊細" + waitPakin.getBarcode() + "宸茶缁勬嫋鍗曪細" + join + "浣跨敤锛侊紒");
+        List<Short> asList = Arrays.asList(Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_DONE.val), Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_DONE.val));
+        WaitPakin list = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
+                .notIn(WaitPakin::getIoStatus, asList)
+                .eq(WaitPakin::getBarcode, waitPakin.getBarcode()));
+        if (!Objects.isNull(list)) {
+            throw new CoolException("鎷栫洏鐮侊細" + waitPakin.getBarcode() + "宸茶缁勬嫋鍗曪細" + list.getCode() + "浣跨敤锛侊紒");
         }
-
         List<Loc> locs = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, waitPakin.getBarcode()));
         if (!locs.isEmpty()) {
             List<String> locCodes = locs.stream().map(Loc::getCode).collect(Collectors.toList());
             String join = StringUtils.join(locCodes, ",");
             throw new CoolException("鎷栫洏鐮侊細" + waitPakin.getBarcode() + "宸茶搴撲綅锛�" + join + "浣跨敤锛侊紒");
         }
-
         double sum = waitPakin.getItems().stream().mapToDouble(PakinItem::getReceiptQty).sum();
 
-        WaitPakin pakin = new WaitPakin();
-
-        String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_WAIT_PAKIN_CODE, null);
-        if (StringUtils.isBlank(ruleCode)) {
-            throw new CoolException("缂栫爜瑙勫垯閿欒锛� 缂栫爜瑙勫垯銆孲YS_WAIT_PAKIN_CODE銆嶈鍒欐槸涓嶅瓨鍦�");
+        WaitPakin waitPakin1 = new WaitPakin();
+        WaitPakin pakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
+                .in(WaitPakin::getIoStatus, asList)
+                .eq(WaitPakin::getBarcode, waitPakin.getBarcode()));
+        if (Objects.isNull(pakin)) {
+            String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_WAIT_PAKIN_CODE, null);
+            if (StringUtils.isBlank(ruleCode)) {
+                throw new CoolException("缂栫爜瑙勫垯閿欒锛� 缂栫爜瑙勫垯銆孲YS_WAIT_PAKIN_CODE銆嶈鍒欐槸涓嶅瓨鍦�");
+            }
+            waitPakin1.setCode(ruleCode)
+                    //鐘舵�佷慨鏀逛负鍏ュ簱涓�
+                    .setIoStatus(Short.parseShort(PakinIOStatus.PAKIN_IO_STATUS_DONE.val))
+                    .setAnfme(sum)
+                    .setBarcode(waitPakin.getBarcode());
+            if (!this.save(waitPakin1)) {
+                throw new CoolException("涓诲崟淇濆瓨澶辫触锛侊紒");
+            }
+        } else {
+            BeanUtils.copyProperties(pakin, waitPakin1);
+            waitPakin1.setAnfme(sum);
+            if (!this.saveOrUpdate(waitPakin1)) {
+                throw new CoolException("涓诲崟淇敼澶辫触锛侊紒");
+            }
         }
-        pakin.setCode(ruleCode)
-                //鐘舵�佷慨鏀逛负鍏ュ簱涓�
-                .setIoStatus(Short.parseShort(PakinIOStatus.PAKIN_IO_STATUS_DONE.val))
-                .setAnfme(sum)
-                .setBarcode(waitPakin.getBarcode());
-        if (!this.save(pakin)) {
-            throw new CoolException("涓诲崟淇濆瓨澶辫触锛侊紒");
-        }
-
         /**鐗╂枡璺熻釜鐮�*/
         List<String> tracks = waitPakin.getItems().stream().map(PakinItem::getTrackCode).collect(Collectors.toList());
-
-        List<AsnOrderItem> asnOrderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>()
-                .in(AsnOrderItem::getTrackCode, tracks));
-        if (Objects.isNull(asnOrderItems) || asnOrderItems.isEmpty()) {
-            throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
+        List<WaitPakinItem> pakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>()
+                .eq(WaitPakinItem::getPakinId, waitPakin1.getId())
+                .in(WaitPakinItem::getTrackCode, tracks));
+        if (!pakinItems.isEmpty()) {
+            if (!waitPakinItemService.remove(new LambdaQueryWrapper<WaitPakinItem>()
+                    .eq(WaitPakinItem::getPakinId, waitPakin1.getId())
+                    .in(WaitPakinItem::getTrackCode, tracks))) {
+                throw new CoolException("鍘熷崟鎹竻闄ゅけ璐ワ紒锛�");
+            }
         }
 
+        LambdaQueryWrapper<WarehouseAreasItem> queryWrapper = new QueryWrapper<WarehouseAreasItem>()
+                .select("SUM(anfme) as anfme, track_code, asn_code, id, splr_batch, ispt_result, plat_item_id, batch, qty, work_qty, matnr_code, matnr_id, maktx")
+                .lambda()
+                .in(WarehouseAreasItem::getTrackCode, tracks)
+                .groupBy(WarehouseAreasItem::getSplrBatch,
+                        WarehouseAreasItem::getTrackCode);
+        List<WarehouseAreasItem> warehouseAreasItems = warehouseAreasItemService.list(queryWrapper);
+        if (Objects.isNull(warehouseAreasItems) || warehouseAreasItems.isEmpty()) {
+            throw new CoolException("鐗╂枡鏈�佽嚦鏀惰揣鍖猴紒锛�");
+        }
         List<WaitPakinItem> items = new ArrayList<>();
-        for (AsnOrderItem item : asnOrderItems) {
+        for (WarehouseAreasItem item : warehouseAreasItems) {
             WaitPakinItem pakinItem = new WaitPakinItem();
             pakinItem.setAnfme(item.getAnfme())
-                    .setPakinId(pakin.getId())
+                    .setPakinId(waitPakin1.getId())
                     .setAsnId(item.getAsnId())
                     .setAsnCode(item.getAsnCode())
                     .setAsnItemId(item.getId())
@@ -112,9 +134,10 @@
                     .setMatnrCode(item.getMatnrCode());
             for (PakinItem waitPakinItem : waitPakin.getItems()) {
                 if (waitPakinItem.getTrackCode().equals(item.getTrackCode())) {
-//                    Double v = item.getWorkQty() + waitPakinItem.getReceiptQty();
+                    if (waitPakinItem.getReceiptQty() > item.getAnfme()) {
+                        throw new CoolException("缁勬嫋鏁伴噺涓嶈兘澶т簬鏀惰揣鏁伴噺锛侊紒");
+                    }
                     pakinItem
-                            .setWorkQty(waitPakinItem.getReceiptQty())
                             .setAnfme(waitPakinItem.getReceiptQty())
                             .setTrackCode(waitPakinItem.getTrackCode());
                     /**鏇存柊鍗曟嵁鎵ц涓簱瀛�*/
@@ -127,9 +150,14 @@
             }
             items.add(pakinItem);
         }
+        double sum1 = items.stream().mapToDouble(WaitPakinItem::getAnfme).sum();
         if (!waitPakinItemService.saveBatch(items)) {
             throw new CoolException("缁勬嫋鏄庣粏淇濆瓨澶辫触锛侊紒");
         }
+        waitPakin1.setAnfme(sum1);
+        if (!this.updateById(waitPakin1)) {
+            throw new CoolException("缁勬嫋鏁伴噺淇敼澶辫触锛侊紒");
+        }
         return pakin;
     }
 

--
Gitblit v1.9.1