From 02c50bf159f9432ef7ee6ba3b3a64f4dd8b3186f Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期一, 10 三月 2025 17:06:28 +0800
Subject: [PATCH] #新增 1. PDA登录接口 2. PDA新增扫码收货接口 3. PDA新增确认收货接口

---
 rsf-common/src/main/java/com/vincent/rsf/common/domain/BaseRes.java                                     |   14 
 rsf-server/src/main/resources/mapper/test/QlyInspectMapper.xml                                          |    5 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyInspect.java                          |   75 +
 rsf-admin/src/page/warehouseAreasItem/index.jsx                                                         |   18 
 rsf-server/src/main/java/com/vincent/rsf/server/system/enums/LoginSystemType.java                       |   13 
 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/ReceiptParams.java                |   28 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java                     |    5 
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java                 |  212 ++++++
 rsf-server/src/main/java/com/vincent/rsf/server/system/enums/CompanyType.java                           |   27 
 rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java                                 |    4 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java                        |   16 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/WarehouseAreasItemMapper.java            |   12 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WarehouseAreasItemServiceImpl.java |   12 
 rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx                                        |  186 +++++
 rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemCreate.jsx                                      |  225 ++++++
 rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemPanel.jsx                                       |  147 ++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java          |    8 
 rsf-server/src/main/java/warehouseAreasItem.sql                                                         |   37 +
 rsf-server/src/main/java/com/vincent/rsf/server/common/security/SecurityConfig.java                     |    1 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/StockItem.java                           |    7 
 rsf-server/src/main/resources/application.yml                                                           |    5 
 rsf-admin/src/i18n/zh.js                                                                                |    2 
 rsf-admin/src/i18n/en.js                                                                                |   17 
 rsf-server/src/main/java/com/vincent/rsf/server/system/controller/param/LoginParam.java                 |    5 
 rsf-server/src/main/resources/application-dev.yml                                                       |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java                          |   23 
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ErpApiServiceImpl.java                 |    2 
 rsf-server/src/main/resources/mapper/manager/WarehouseAreasItemMapper.xml                               |    5 
 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java                    |   76 ++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/PurchaseItem.java                        |    4 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreasItem.java                  |  320 +++++++++
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/ErpApiService.java                          |   10 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseAreasItemController.java    |  110 +++
 rsf-server/src/main/java/com/vincent/rsf/server/system/entity/UserLogin.java                            |    4 
 rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/PoItemsDto.java                          |    2 
 rsf-server/src/main/java/purchaseItem.sql                                                               |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/system/constant/CodeRes.java                            |   17 
 rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemEdit.jsx                                        |  198 ++++++
 rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/ReceiptDetlsDto.java                     |   67 ++
 39 files changed, 1,870 insertions(+), 53 deletions(-)

diff --git a/rsf-admin/src/i18n/en.js b/rsf-admin/src/i18n/en.js
index e2a33b9..fcb6747 100644
--- a/rsf-admin/src/i18n/en.js
+++ b/rsf-admin/src/i18n/en.js
@@ -433,21 +433,6 @@
                 packName: "packName",
                 ntyStatus: "ntyStatus",
             },
-            purchaseItem: {
-                purchaseId: "purchaseId",
-                erpItemId: "erpItemId",
-                matnrCode: "matnrCode",
-                matnrName: "matnrName",
-                unit: "unit",
-                anfme: "anfme",
-                qty: "qty",
-                nromQty: "nromQty",
-                asnQty: "asnQty",
-                printQty: "printQty",
-                splrName: "splrName",
-                splrCode: "splrCode",
-                splrBatch: "splrBatch",
-            },
             purchase: {
                 code: "code",
                 erpId: "erpId",
@@ -466,7 +451,7 @@
             },
             purchaseItem: {
                 purchaseId: "purchaseId",
-                erpItemId: "erpItemId",
+                platItemId: "erpItemId",
                 matnrCode: "matnrCode",
                 matnrName: "matnrName",
                 unit: "unit",
diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js
index a5b8c10..c3db3fc 100644
--- a/rsf-admin/src/i18n/zh.js
+++ b/rsf-admin/src/i18n/zh.js
@@ -451,7 +451,7 @@
             },
             purchaseItem: {
                 purchaseId: "PO涓诲崟鏍囪瘑",
-                erpItemId: "erp鏄庣粏鏍囪瘑",
+                platItemId: "erp鏄庣粏鏍囪瘑",
                 matnrCode: "鐗╂枡缂栫爜",
                 matnrName: "鐗╂枡鍚嶇О",
                 unit: "璁¢噺鍗曚綅",
diff --git a/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemCreate.jsx b/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemCreate.jsx
new file mode 100644
index 0000000..2c63e6d
--- /dev/null
+++ b/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemCreate.jsx
@@ -0,0 +1,225 @@
+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 WarehouseAreasItemCreate = (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.warehouseAreasItem.areaId"
+                                        source="areaId"
+                                        autoFocus
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <TextInput
+                                        label="table.field.warehouseAreasItem.areaName"
+                                        source="areaName"
+                                        parse={v => v}
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <NumberInput
+                                        label="table.field.warehouseAreasItem.matnrId"
+                                        source="matnrId"
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <TextInput
+                                        label="table.field.warehouseAreasItem.matnrName"
+                                        source="matnrName"
+                                        parse={v => v}
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <TextInput
+                                        label="table.field.warehouseAreasItem.matnrCode"
+                                        source="matnrCode"
+                                        parse={v => v}
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <TextInput
+                                        label="table.field.warehouseAreasItem.barcode"
+                                        source="barcode"
+                                        parse={v => v}
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <NumberInput
+                                        label="table.field.warehouseAreasItem.anfme"
+                                        source="anfme"
+                                        validate={required()}
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <TextInput
+                                        label="table.field.warehouseAreasItem.batch"
+                                        source="batch"
+                                        parse={v => v}
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <TextInput
+                                        label="table.field.warehouseAreasItem.unit"
+                                        source="unit"
+                                        parse={v => v}
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <TextInput
+                                        label="table.field.warehouseAreasItem.stockUnit"
+                                        source="stockUnit"
+                                        parse={v => v}
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <TextInput
+                                        label="table.field.warehouseAreasItem.brand"
+                                        source="brand"
+                                        parse={v => v}
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <ReferenceInput
+                                        source="shipperId"
+                                        reference="companys"
+                                    >
+                                        <AutocompleteInput
+                                            label="table.field.warehouseAreasItem.shipperId"
+                                            optionText="name"
+                                            filterToQuery={(val) => ({ name: val })}
+                                        />
+                                    </ReferenceInput>
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <TextInput
+                                        label="table.field.warehouseAreasItem.splrId"
+                                        source="splrId"
+                                        parse={v => v}
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <NumberInput
+                                        label="table.field.warehouseAreasItem.weight"
+                                        source="weight"
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <TextInput
+                                        label="table.field.warehouseAreasItem.prodTime"
+                                        source="prodTime"
+                                        parse={v => v}
+                                    />
+                                </Grid>
+                                <Grid item xs={6} display="flex" gap={1}>
+                                    <TextInput
+                                        label="table.field.warehouseAreasItem.splrBtch"
+                                        source="splrBtch"
+                                        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 WarehouseAreasItemCreate;
diff --git a/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemEdit.jsx b/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemEdit.jsx
new file mode 100644
index 0000000..fd344fa
--- /dev/null
+++ b/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemEdit.jsx
@@ -0,0 +1,198 @@
+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 WarehouseAreasItemEdit = () => {
+    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}>
+                            <NumberInput
+                                label="table.field.warehouseAreasItem.areaId"
+                                source="areaId"
+                                autoFocus
+                            />
+                        </Stack>
+                        <Stack direction='row' gap={2}>
+                            <TextInput
+                                label="table.field.warehouseAreasItem.areaName"
+                                source="areaName"
+                                parse={v => v}
+                            />
+                        </Stack>
+                        <Stack direction='row' gap={2}>
+                            <NumberInput
+                                label="table.field.warehouseAreasItem.matnrId"
+                                source="matnrId"
+                            />
+                        </Stack>
+                        <Stack direction='row' gap={2}>
+                            <TextInput
+                                label="table.field.warehouseAreasItem.matnrName"
+                                source="matnrName"
+                                parse={v => v}
+                            />
+                        </Stack>
+                        <Stack direction='row' gap={2}>
+                            <TextInput
+                                label="table.field.warehouseAreasItem.matnrCode"
+                                source="matnrCode"
+                                parse={v => v}
+                            />
+                        </Stack>
+                        <Stack direction='row' gap={2}>
+                            <TextInput
+                                label="table.field.warehouseAreasItem.barcode"
+                                source="barcode"
+                                parse={v => v}
+                            />
+                        </Stack>
+                        <Stack direction='row' gap={2}>
+                            <NumberInput
+                                label="table.field.warehouseAreasItem.anfme"
+                                source="anfme"
+                                validate={required()}
+                            />
+                        </Stack>
+                        <Stack direction='row' gap={2}>
+                            <TextInput
+                                label="table.field.warehouseAreasItem.batch"
+                                source="batch"
+                                parse={v => v}
+                            />
+                        </Stack>
+                        <Stack direction='row' gap={2}>
+                            <TextInput
+                                label="table.field.warehouseAreasItem.unit"
+                                source="unit"
+                                parse={v => v}
+                            />
+                        </Stack>
+                        <Stack direction='row' gap={2}>
+                            <TextInput
+                                label="table.field.warehouseAreasItem.stockUnit"
+                                source="stockUnit"
+                                parse={v => v}
+                            />
+                        </Stack>
+                        <Stack direction='row' gap={2}>
+                            <TextInput
+                                label="table.field.warehouseAreasItem.brand"
+                                source="brand"
+                                parse={v => v}
+                            />
+                        </Stack>
+                        <Stack direction='row' gap={2}>
+                            <ReferenceInput
+                                source="shipperId"
+                                reference="companys"
+                                perPage={REFERENCE_INPUT_PAGESIZE}
+                            >
+                                <AutocompleteInput
+                                    label="table.field.warehouseAreasItem.shipperId"
+                                    optionText="name"
+                                    filterToQuery={(val) => ({ name: val })}
+                                />
+                            </ReferenceInput>
+                        </Stack>
+                        <Stack direction='row' gap={2}>
+                            <TextInput
+                                label="table.field.warehouseAreasItem.splrId"
+                                source="splrId"
+                                parse={v => v}
+                            />
+                        </Stack>
+                        <Stack direction='row' gap={2}>
+                            <NumberInput
+                                label="table.field.warehouseAreasItem.weight"
+                                source="weight"
+                            />
+                        </Stack>
+                        <Stack direction='row' gap={2}>
+                            <TextInput
+                                label="table.field.warehouseAreasItem.prodTime"
+                                source="prodTime"
+                                parse={v => v}
+                            />
+                        </Stack>
+                        <Stack direction='row' gap={2}>
+                            <TextInput
+                                label="table.field.warehouseAreasItem.splrBtch"
+                                source="splrBtch"
+                                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 WarehouseAreasItemEdit;
diff --git a/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx b/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx
new file mode 100644
index 0000000..65fc752
--- /dev/null
+++ b/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx
@@ -0,0 +1,186 @@
+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,
+} from 'react-admin';
+import { Box, Typography, Card, Stack } from '@mui/material';
+import { styled } from '@mui/material/styles';
+import WarehouseAreasItemCreate from "./WarehouseAreasItemCreate";
+import WarehouseAreasItemPanel from "./WarehouseAreasItemPanel";
+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';
+
+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" alwaysOn />,
+    <DateInput label='common.time.before' source="timeEnd" alwaysOn />,
+
+    <NumberInput source="areaId" label="table.field.warehouseAreasItem.areaId" />,
+    <TextInput source="areaName" label="table.field.warehouseAreasItem.areaName" />,
+    <NumberInput source="matnrId" label="table.field.warehouseAreasItem.matnrId" />,
+    <TextInput source="matnrName" label="table.field.warehouseAreasItem.matnrName" />,
+    <TextInput source="matnrCode" label="table.field.warehouseAreasItem.matnrCode" />,
+    <TextInput source="barcode" label="table.field.warehouseAreasItem.barcode" />,
+    <NumberInput source="anfme" label="table.field.warehouseAreasItem.anfme" />,
+    <TextInput source="batch" label="table.field.warehouseAreasItem.batch" />,
+    <TextInput source="unit" label="table.field.warehouseAreasItem.unit" />,
+    <TextInput source="stockUnit" label="table.field.warehouseAreasItem.stockUnit" />,
+    <TextInput source="brand" label="table.field.warehouseAreasItem.brand" />,
+    <ReferenceInput source="shipperId" label="table.field.warehouseAreasItem.shipperId" reference="companys">
+        <AutocompleteInput label="table.field.warehouseAreasItem.shipperId" optionText="name" filterToQuery={(val) => ({ name: val })} />
+    </ReferenceInput>,
+    <TextInput source="splrId" label="table.field.warehouseAreasItem.splrId" />,
+    <NumberInput source="weight" label="table.field.warehouseAreasItem.weight" />,
+    <TextInput source="prodTime" label="table.field.warehouseAreasItem.prodTime" />,
+    <TextInput source="splrBtch" label="table.field.warehouseAreasItem.splrBtch" />,
+
+    <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 WarehouseAreasItemList = () => {
+    const translate = useTranslate();
+
+    const [createDialog, setCreateDialog] = useState(false);
+    const [drawerVal, setDrawerVal] = useState(false);
+
+    return (
+        <Box display="flex">
+            <List
+                sx={{
+                    flexGrow: 1,
+                    transition: (theme) =>
+                        theme.transitions.create(['all'], {
+                            duration: theme.transitions.duration.enteringScreen,
+                        }),
+                    marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
+                }}
+                title={"menu.warehouseAreasItem"}
+                empty={<EmptyData onClick={() => { setCreateDialog(true) }} />}
+                filters={filters}
+                sort={{ field: "create_time", order: "desc" }}
+                actions={(
+                    <TopToolbar>
+                        <FilterButton />
+                        <MyCreateButton onClick={() => { setCreateDialog(true) }} />
+                        <SelectColumnsButton preferenceKey='warehouseAreasItem' />
+                        <MyExportButton />
+                    </TopToolbar>
+                )}
+                perPage={DEFAULT_PAGE_SIZE}
+            >
+                <StyledDatagrid
+                    preferenceKey='warehouseAreasItem'
+                    bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />}
+                    rowClick={(id, resource, record) => false}
+                    expand={() => <WarehouseAreasItemPanel />}
+                    expandSingle={true}
+                    omit={['id', 'createTime', 'createBy', 'memo']}
+                >
+                    <NumberField source="id" />
+                    <NumberField source="areaId" label="table.field.warehouseAreasItem.areaId" />
+                    <TextField source="areaName" label="table.field.warehouseAreasItem.areaName" />
+                    <NumberField source="matnrId" label="table.field.warehouseAreasItem.matnrId" />
+                    <TextField source="matnrName" label="table.field.warehouseAreasItem.matnrName" />
+                    <TextField source="matnrCode" label="table.field.warehouseAreasItem.matnrCode" />
+                    <TextField source="barcode" label="table.field.warehouseAreasItem.barcode" />
+                    <NumberField source="anfme" label="table.field.warehouseAreasItem.anfme" />
+                    <TextField source="batch" label="table.field.warehouseAreasItem.batch" />
+                    <TextField source="unit" label="table.field.warehouseAreasItem.unit" />
+                    <TextField source="stockUnit" label="table.field.warehouseAreasItem.stockUnit" />
+                    <TextField source="brand" label="table.field.warehouseAreasItem.brand" />
+                    <ReferenceField source="shipperId" label="table.field.warehouseAreasItem.shipperId" reference="companys" link={false} sortable={false}>
+                        <TextField source="name" />
+                    </ReferenceField>
+                    <TextField source="splrId" label="table.field.warehouseAreasItem.splrId" />
+                    <NumberField source="weight" label="table.field.warehouseAreasItem.weight" />
+                    <TextField source="prodTime" label="table.field.warehouseAreasItem.prodTime" />
+                    <TextField source="splrBtch" label="table.field.warehouseAreasItem.splrBtch" />
+
+                    <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>
+            <WarehouseAreasItemCreate
+                open={createDialog}
+                setOpen={setCreateDialog}
+            />
+            <PageDrawer
+                title='WarehouseAreasItem Detail'
+                drawerVal={drawerVal}
+                setDrawerVal={setDrawerVal}
+            >
+            </PageDrawer>
+        </Box>
+    )
+}
+
+export default WarehouseAreasItemList;
diff --git a/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemPanel.jsx b/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemPanel.jsx
new file mode 100644
index 0000000..704e7f0
--- /dev/null
+++ b/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemPanel.jsx
@@ -0,0 +1,147 @@
+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 WarehouseAreasItemPanel = () => {
+    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.warehouseAreasItem.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.warehouseAreasItem.areaId" 
+                                property={record.areaId}
+                            />
+                        </Grid>
+                        <Grid item xs={6}>
+                            <PanelTypography
+                                title="table.field.warehouseAreasItem.areaName" 
+                                property={record.areaName}
+                            />
+                        </Grid>
+                        <Grid item xs={6}>
+                            <PanelTypography
+                                title="table.field.warehouseAreasItem.matnrId" 
+                                property={record.matnrId}
+                            />
+                        </Grid>
+                        <Grid item xs={6}>
+                            <PanelTypography
+                                title="table.field.warehouseAreasItem.matnrName" 
+                                property={record.matnrName}
+                            />
+                        </Grid>
+                        <Grid item xs={6}>
+                            <PanelTypography
+                                title="table.field.warehouseAreasItem.matnrCode" 
+                                property={record.matnrCode}
+                            />
+                        </Grid>
+                        <Grid item xs={6}>
+                            <PanelTypography
+                                title="table.field.warehouseAreasItem.barcode" 
+                                property={record.barcode}
+                            />
+                        </Grid>
+                        <Grid item xs={6}>
+                            <PanelTypography
+                                title="table.field.warehouseAreasItem.anfme" 
+                                property={record.anfme}
+                            />
+                        </Grid>
+                        <Grid item xs={6}>
+                            <PanelTypography
+                                title="table.field.warehouseAreasItem.batch" 
+                                property={record.batch}
+                            />
+                        </Grid>
+                        <Grid item xs={6}>
+                            <PanelTypography
+                                title="table.field.warehouseAreasItem.unit" 
+                                property={record.unit}
+                            />
+                        </Grid>
+                        <Grid item xs={6}>
+                            <PanelTypography
+                                title="table.field.warehouseAreasItem.stockUnit" 
+                                property={record.stockUnit}
+                            />
+                        </Grid>
+                        <Grid item xs={6}>
+                            <PanelTypography
+                                title="table.field.warehouseAreasItem.brand" 
+                                property={record.brand}
+                            />
+                        </Grid>
+                        <Grid item xs={6}>
+                            <PanelTypography
+                                title="table.field.warehouseAreasItem.shipperId" 
+                                property={record.shipperId$}
+                            />
+                        </Grid>
+                        <Grid item xs={6}>
+                            <PanelTypography
+                                title="table.field.warehouseAreasItem.splrId" 
+                                property={record.splrId$}
+                            />
+                        </Grid>
+                        <Grid item xs={6}>
+                            <PanelTypography
+                                title="table.field.warehouseAreasItem.weight" 
+                                property={record.weight}
+                            />
+                        </Grid>
+                        <Grid item xs={6}>
+                            <PanelTypography
+                                title="table.field.warehouseAreasItem.prodTime" 
+                                property={record.prodTime}
+                            />
+                        </Grid>
+                        <Grid item xs={6}>
+                            <PanelTypography
+                                title="table.field.warehouseAreasItem.splrBtch" 
+                                property={record.splrBtch}
+                            />
+                        </Grid>
+
+                    </Grid>
+                </CardContent>
+            </Card >
+        </>
+    );
+};
+
+export default WarehouseAreasItemPanel;
diff --git a/rsf-admin/src/page/warehouseAreasItem/index.jsx b/rsf-admin/src/page/warehouseAreasItem/index.jsx
new file mode 100644
index 0000000..0f0bdd0
--- /dev/null
+++ b/rsf-admin/src/page/warehouseAreasItem/index.jsx
@@ -0,0 +1,18 @@
+import React, { useState, useRef, useEffect, useMemo } from "react";
+import {
+    ListGuesser,
+    EditGuesser,
+    ShowGuesser,
+} from "react-admin";
+
+import WarehouseAreasItemList from "./WarehouseAreasItemList";
+import WarehouseAreasItemEdit from "./WarehouseAreasItemEdit";
+
+export default {
+    list: WarehouseAreasItemList,
+    edit: WarehouseAreasItemEdit,
+    show: ShowGuesser,
+    recordRepresentation: (record) => {
+        return `${record.id}`
+    }
+};
diff --git a/rsf-common/src/main/java/com/vincent/rsf/common/domain/BaseRes.java b/rsf-common/src/main/java/com/vincent/rsf/common/domain/BaseRes.java
new file mode 100644
index 0000000..2e6ab57
--- /dev/null
+++ b/rsf-common/src/main/java/com/vincent/rsf/common/domain/BaseRes.java
@@ -0,0 +1,14 @@
+package com.vincent.rsf.common.domain;
+
+public interface BaseRes {
+
+    String OK = "200-鎿嶄綔鎴愬姛";
+    String SUCESS = "sucess";
+    String EMPTY = "201-鏆傛棤鏁版嵁";
+    String LIMIT = "202-鏃犳潈闄�";
+    String PARAM = "401-鍙傛暟涓虹┖";
+    String DENIED = "403-璇烽噸鏂扮櫥褰�";
+    String REPEAT = "407-宸插瓨鍦�";
+    String NO_ACTIVATION = "409-璇峰厛婵�娲荤郴缁�";
+    String ERROR = "500-鏈嶅姟鍣ㄩ敊璇�";
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
new file mode 100644
index 0000000..e96c1e4
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
@@ -0,0 +1,76 @@
+package com.vincent.rsf.server.api.controller;
+
+import com.vincent.rsf.framework.common.R;
+import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.server.api.controller.params.ReceiptParams;
+import com.vincent.rsf.server.api.entity.dto.ReceiptDetlsDto;
+import com.vincent.rsf.server.api.service.MobileService;
+import com.vincent.rsf.server.system.controller.BaseController;
+import com.vincent.rsf.server.system.controller.param.LoginParam;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.tika.utils.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * @author Ryan
+ * @version 1.0
+ * @title MobileController
+ * @description
+ * @create 2025/3/10 08:05
+ */
+@Api(tags = "PDA鎿嶄綔鎺ュ彛")
+@RequestMapping("/pda")
+@RestController
+public class MobileController extends BaseController {
+
+    @Autowired
+    private MobileService mobileService;
+
+
+    @PostMapping("/login")
+    @ApiOperation("PDA鐢ㄦ埛鐧诲綍")
+    public R login(@RequestBody LoginParam param, HttpServletRequest request) {
+        if (Objects.isNull(param)) {
+            throw new CoolException("鐧诲綍淇℃伅涓嶈兘涓虹┖锛侊紒");
+        }
+        if (Objects.isNull(param.getUsername())) {
+            throw new CoolException("鐢ㄦ埛鍚嶄笉鑳戒负绌猴紒锛�");
+        }
+        if (Objects.isNull(param.getPassword())) {
+            throw new CoolException("瀵嗙爜涓嶈兘涓虹┖锛侊紒");
+        }
+
+        return mobileService.login(param, request);
+    }
+
+
+    @PreAuthorize("hasAuthority('manager:asnOrder:list')")
+    @GetMapping("/orders/{barcode}")
+    @ApiOperation("鏍囧噯鎵爜鏀惰揣")
+    public R  getOrderBybarcode(@PathVariable String barcode) {
+        if (StringUtils.isEmpty(barcode)) {
+            throw new CoolException("鏉$爜涓嶈兘涓虹┖锛侊紒");
+        }
+        return mobileService.getOrderByCode(barcode);
+    }
+
+    @PreAuthorize("hasAuthority('manager:warehouseAreas:save')")
+    @PostMapping("/orders/confirm")
+    @ApiOperation("纭鏀惰揣")
+    public R confirmReceipt(@RequestBody ReceiptParams params) {
+       if (Objects.isNull(params)) {
+           throw new CoolException("璇锋眰鍙傛暟涓嶈兘涓虹┖锛侊紒");
+       }
+        return mobileService.receiptToWarehouse(params);
+    }
+
+
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/ReceiptParams.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/ReceiptParams.java
new file mode 100644
index 0000000..e2f53d8
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/ReceiptParams.java
@@ -0,0 +1,28 @@
+package com.vincent.rsf.server.api.controller.params;
+
+import com.vincent.rsf.server.api.entity.dto.ReceiptDetlsDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+/**
+ * @author Ryan
+ * @version 1.0
+ * @title ReceiptParams
+ * @description
+ * @create 2025/3/10 16:22
+ */
+@Data
+@Accessors
+@ApiModel(value = "ReceiptParams", description = "纭鏀惰揣璇锋眰鍙傛暟")
+public class ReceiptParams {
+
+    @ApiModelProperty(value = "鏀惰揣鏄庣粏", required = true)
+    private List<ReceiptDetlsDto> receipts;
+
+    @ApiModelProperty(value = "搴撳尯鏍囪瘑", required = true)
+    private Long whAreaId;
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/PoItemsDto.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/PoItemsDto.java
index 01aa9f7..97ad2b6 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/PoItemsDto.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/PoItemsDto.java
@@ -26,7 +26,7 @@
     private String purchaseId;
 
     @ApiModelProperty("Erp鏄庣粏鍗曟爣璇�")
-    private String erpItemId;
+    private String platItemId;
 
     @ApiModelProperty("鐗╂枡缂栫爜")
     private String matnrCode;
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/ReceiptDetlsDto.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/ReceiptDetlsDto.java
new file mode 100644
index 0000000..ae83305
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/ReceiptDetlsDto.java
@@ -0,0 +1,67 @@
+package com.vincent.rsf.server.api.entity.dto;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * @author Ryan
+ * @version 1.0
+ * @title ReceiptDetlsDto
+ * @description
+ * @create 2025/3/10 14:34
+ */
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "ReceiptDetlsDto", description = "鏀惰揣鏄庣粏淇℃伅")
+public class ReceiptDetlsDto implements Serializable {
+
+    @ApiModelProperty("鏀惰揣閫氱煡鍗�")
+    private String asnCode;
+
+    @ApiModelProperty("鏉″舰鐮�")
+    private String barcode;
+
+    @ApiModelProperty("閲囪喘鍗�")
+    private String poCode;
+
+    @ApiModelProperty("鐗╂枡鍚嶇О")
+    private String matnk;
+
+    @ApiModelProperty("渚涘簲鍟嗘壒娆�")
+    private String splrBatch;
+
+    @ApiModelProperty("鏈�澶у簱瀛�")
+    private Double maxQty;
+
+    @ApiModelProperty("骞冲彴琛屽彿")
+    private String platformId;
+
+    @ApiModelProperty("瀹炴椂搴撳瓨")
+    private Double stockQty;
+
+    @ApiModelProperty("璐ㄦ缁撴灉")
+    private String inspect;
+
+    @ApiModelProperty("閲囪喘鍗曚綅")
+    private String purUnit;
+
+    @ApiModelProperty("搴撳瓨鍗曚綅")
+    private String stockUnit;
+
+    @ApiModelProperty("閲囪喘鏁伴噺")
+    private Double purQty;
+
+    @ApiModelProperty("鏀惰揣鏁伴噺")
+    private Double receiptQty;
+
+    @ApiModelProperty("鐗╂枡鏍囪瘑")
+    private Long matnrId;
+
+    @ApiModelProperty("渚涘簲鍟嗙紪鐮�")
+    private String splrCode;
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ErpApiService.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ErpApiService.java
index 266c842..321eb7a 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ErpApiService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ErpApiService.java
@@ -15,7 +15,17 @@
  */
 public interface ErpApiService {
 
+    /**
+     * 閲囪喘鍗曞悓姝�
+     * @param orders
+     * @return
+     */
     boolean syncPurchasee(List<Order> orders);
 
+    /**
+     * 涓�閿姤妫�
+     * @param items
+     * @return
+     */
     boolean reportInspectNotify(List<PoItemsDto> items);
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
new file mode 100644
index 0000000..e730332
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
@@ -0,0 +1,23 @@
+package com.vincent.rsf.server.api.service;
+
+import com.vincent.rsf.framework.common.R;
+import com.vincent.rsf.server.api.controller.params.ReceiptParams;
+import com.vincent.rsf.server.system.controller.param.LoginParam;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @author Ryan
+ * @version 1.0
+ * @title MobileService
+ * @description
+ * @create 2025/3/10 08:06
+ */
+public interface MobileService {
+
+    R login(LoginParam param, HttpServletRequest request);
+
+    R getOrderByCode(String barcode);
+
+    R receiptToWarehouse(ReceiptParams orders);
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ErpApiServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ErpApiServiceImpl.java
index 6ba6412..0400228 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ErpApiServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ErpApiServiceImpl.java
@@ -133,7 +133,7 @@
                 ErpInspectItem inspect= new ErpInspectItem();
                 BeanUtils.copyProperties(dto, inspect);
                 //璧嬪�糴rp鏄庣粏缂栫爜
-                inspect.setPoItemId(dto.getErpItemId());
+                inspect.setPoItemId(dto.getPlatItemId());
                 inspectItems.add(inspect);
             });
             params.setChildren(inspectItems);
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
new file mode 100644
index 0000000..b2bc903
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -0,0 +1,212 @@
+package com.vincent.rsf.server.api.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.vincent.rsf.framework.common.Cools;
+import com.vincent.rsf.framework.common.R;
+import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.server.api.controller.params.ReceiptParams;
+import com.vincent.rsf.server.api.entity.dto.ReceiptDetlsDto;
+import com.vincent.rsf.server.api.service.MobileService;
+import com.vincent.rsf.server.common.config.ConfigProperties;
+import com.vincent.rsf.server.common.security.JwtSubject;
+import com.vincent.rsf.server.common.utils.JwtUtil;
+import com.vincent.rsf.server.manager.entity.*;
+import com.vincent.rsf.server.manager.mapper.*;
+import com.vincent.rsf.server.manager.service.WarehouseAreasItemService;
+import com.vincent.rsf.server.system.constant.CodeRes;
+import com.vincent.rsf.server.system.controller.param.LoginParam;
+import com.vincent.rsf.server.system.controller.result.LoginResult;
+import com.vincent.rsf.server.system.entity.Tenant;
+import com.vincent.rsf.server.system.entity.User;
+import com.vincent.rsf.server.system.entity.UserLogin;
+import com.vincent.rsf.server.system.mapper.TenantMapper;
+import com.vincent.rsf.server.system.mapper.UserMapper;
+import com.vincent.rsf.server.system.service.UserLoginService;
+import org.apache.tika.utils.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.*;
+
+/**
+ * @author Ryan
+ * @version 1.0
+ * @title MobileServiceImpl
+ * @description
+ * @create 2025/3/10 08:07
+ */
+@Service
+public class MobileServiceImpl implements MobileService {
+
+    @Value("${super.pwd}")
+    private String superPwd;
+    @Resource
+    private ConfigProperties configProperties;
+    @Autowired
+    private TenantMapper tenantService;
+    @Autowired
+    private UserMapper userService;
+    @Autowired
+    private UserLoginService userLoginService;
+
+    @Autowired
+    private WarehouseAreasItemService warehouseAreasItemService;
+    @Resource
+    private AsnOrderItemMapper asnOrderItemMapper;
+    @Resource
+    private MatnrMapper matnrMapper;
+    @Resource
+    private QlyInspectMapper qlyInspectMapper;
+    @Resource
+    private StockItemMapper stockItemMapper;
+    @Resource
+    private PurchaseItemMapper purchaseItemMapper;
+
+
+    /**
+     * @author Ryan
+     * @description 鎵嬫寔PDA鐧诲綍鎺ュ彛
+     * @params LoginParam param锛� HttpServletRequest request
+     * @return
+     * @time 2025/3/10 15:36
+     */
+    @Override
+    public R login(LoginParam param, HttpServletRequest request) {
+        User user = userService.selectByUsernameWithoutTenant(param.getUsername(), null);
+        if (param.getUsername().equals("super") && param.getPassword().equals(Cools.md5(superPwd))) {
+            Map<String, Object> res = new HashMap<>();
+            res.put("username", param.getUsername());
+            res.put("token", JwtUtil.buildToken(new JwtSubject(param.getUsername(), user.getTenantId()),
+                    configProperties.getTokenExpireTime(), configProperties.getTokenKey()));
+            return R.ok(res);
+        }
+
+        if (Cools.isEmpty(user)) {
+            return R.parse(CodeRes.USER_10001);
+        }
+        if (user.getStatus() != 1) {
+            return R.parse(CodeRes.USER_10002);
+        }
+        if (!user.getPassword().equals(param.getPassword())) {
+            return R.parse(CodeRes.USER_10003);
+        }
+
+        String accessToken = JwtUtil.buildToken(new JwtSubject(param.getUsername(), user.getTenantId()),
+                configProperties.getTokenExpireTime(), configProperties.getTokenKey());
+        userLoginService.saveAsync(user.getId(), accessToken, UserLogin.TYPE_LOGIN, user.getTenantId(), null, request);
+        Tenant tenant = tenantService.selectById(user.getTenantId());
+        return R.ok("Sign In Success").add(new LoginResult(accessToken, user, tenant.getName()));
+    }
+
+    /**
+     * @author Ryan
+     * @description 鎵爜鑾峰彇鏀惰揣鏄庣粏
+     * @param barcode
+     * @return
+     * @time 2025/3/10 15:37
+     */
+    @Override
+    public R getOrderByCode(String barcode) {
+        if (StringUtils.isEmpty(barcode)) {
+            return R.error("鏍囩鐮佷笉鑳戒负绌猴紒锛�");
+        }
+        ReceiptDetlsDto detlsDto = new ReceiptDetlsDto();
+        AsnOrderItem asnOrderItem = asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getBarcode, barcode));
+        if (Objects.isNull(asnOrderItem)) {
+            throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�");
+        }
+        detlsDto.setAsnCode(asnOrderItem.getAsnCode())
+                .setMatnk(asnOrderItem.getMatnk())
+                .setBarcode(asnOrderItem.getBarcode())
+                .setPoCode(asnOrderItem.getPoCode())
+                .setPurQty(asnOrderItem.getAnfme())
+                .setSplrBatch(asnOrderItem.getSplrBatch());
+
+        Matnr matnr = matnrMapper.selectById(asnOrderItem.getMatnrId());
+        if (Objects.isNull(matnr)) {
+            throw new CoolException("鏁版嵁閿欒锛氬綋鍓嶇墿鏂欎笉瀛樺湪锛侊紒");
+        }
+        //SET 鐗╂枡鏈�澶у瓨鏀炬暟閲�
+        detlsDto.setMaxQty(matnr.getMaxQty())
+                .setMatnrId(matnr.getId())
+                .setStockUnit(matnr.getStockUnit());
+        QlyInspect inspect = qlyInspectMapper.selectOne(new LambdaQueryWrapper<QlyInspect>()
+                .eq(QlyInspect::getAsnItemId, asnOrderItem.getId()).eq(QlyInspect::getPoItemId, asnOrderItem.getPoDetlId()));
+        //set 璐ㄦ缁撴灉
+        detlsDto.setInspect(inspect.getStatus$());
+        //鑾峰彇褰撳墠搴撳瓨淇℃伅
+        StockItem stockItem = stockItemMapper.selectOne(new LambdaQueryWrapper<StockItem>()
+                .eq(StockItem::getAsnItemId, asnOrderItem.getId())
+                .eq(StockItem::getMatnrId, asnOrderItem.getMatnrId()));
+        //SET 褰撳墠搴撳瓨鏁伴噺
+        if (Objects.isNull(stockItem)) {
+            detlsDto.setStockQty(0.0);
+        } else {
+            detlsDto.setStockQty(stockItem.getQty() + stockItem.getWorkQty());
+        }
+
+        //鑾峰彇閲囪喘鍗曟槑缁嗕俊鎭�
+        PurchaseItem purchaseItem = purchaseItemMapper.selectOne(new LambdaQueryWrapper<PurchaseItem>().eq(PurchaseItem::getId, asnOrderItem.getPoDetlId()));
+        //SET 骞冲彴琛屽彿
+        detlsDto.setPlatformId(purchaseItem.getPlatItemId());
+
+        return R.ok(detlsDto);
+    }
+
+    /**
+     * @author Ryan
+     * @description 鏀惰揣鑷虫敹璐у尯
+     * @param  params
+     * @return
+     * @time 2025/3/10 15:41
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R receiptToWarehouse(ReceiptParams params) {
+        if (params.getReceipts().isEmpty()) {
+            throw new CoolException("鏀惰揣鏄庣粏涓嶈兘涓虹┖锛侊紒");
+        }
+        if (Objects.isNull(params.getWhAreaId())) {
+            throw new CoolException("搴撳尯鏍囪瘑涓嶈兘涓虹┖锛侊紒");
+        }
+        WarehouseAreasItem areasItem = warehouseAreasItemService.getOne(new LambdaQueryWrapper<WarehouseAreasItem>().eq(WarehouseAreasItem::getAreaId, params.getWhAreaId()));
+        List<ReceiptDetlsDto> receipts = params.getReceipts();
+        List<WarehouseAreasItem> allOrders =   new ArrayList<>();
+        receipts.forEach(dto -> {
+            Matnr matnr = matnrMapper.selectById(dto.getMatnrId());
+            if (Objects.isNull(matnr)) {
+                throw new CoolException("鏁版嵁閿欒锛氬綋鍓嶇墿鏂欎笉瀛樺湪锛侊紒");
+            }
+            WarehouseAreasItem item = new WarehouseAreasItem();
+            item.setBarcode(dto.getBarcode())
+                    .setAreaName(areasItem.getAreaName())
+                    .setAreaId(areasItem.getAreaId())
+                    .setStockUnit(dto.getStockUnit())
+                    //TODO 缂栫爜瑙勫垯鐢熸垚鎵规 (鐗╂枡鍙�+鏃ユ湡)
+                    .setBatch(null)
+                    .setAnfme(dto.getReceiptQty())
+                    .setSplrBtch(dto.getSplrBatch())
+                    .setMatnrCode(matnr.getCode())
+                    .setMatnrId(matnr.getId())
+                    .setMatnrName(matnr.getName())
+                    //TODO 鍏ュ簱鍗曚綅鎹㈢畻
+                    .setUnit(dto.getStockUnit())
+                    .setStockUnit(dto.getStockUnit())
+                    .setWeight(matnr.getWeight())
+                    .setShipperId(matnr.getShipperId());
+                    //TODO 渚涘簲鍟嗘爣璇嗘湭璁剧疆
+
+            allOrders.add(item);
+        });
+
+        if (!warehouseAreasItemService.saveBatch(allOrders)) {
+            throw new CoolException("鏀惰揣澶辫触锛侊紒");
+        }
+
+        return R.ok("鎿嶄綔鎴愬姛");
+    }
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java
index 68d4754..470edb8 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java
@@ -22,8 +22,8 @@
 //        generator.username="sa";
 //        generator.password="Zoneyung@zy56$";
 
-        generator.table="man_purchase_item";
-        generator.tableDesc="閲囪喘鏄庣粏鍗�";
+        generator.table="man_warehouse_areas_item";
+        generator.tableDesc="鏀惰揣鍖哄簱瀛樹俊鎭�";
         generator.packagePath="com.vincent.rsf.server.manager";
 
         generator.build();
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/security/SecurityConfig.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/security/SecurityConfig.java
index 9375e31..3ba527a 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/security/SecurityConfig.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/security/SecurityConfig.java
@@ -39,6 +39,7 @@
             "/system/info",
             "/tenant/list",
             "/email/code",
+            "/pda/login",
             "/erp/**",
             "/login",
             "/register",
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseAreasItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseAreasItemController.java
new file mode 100644
index 0000000..f2e71f2
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseAreasItemController.java
@@ -0,0 +1,110 @@
+package com.vincent.rsf.server.manager.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.vincent.rsf.framework.common.Cools;
+import com.vincent.rsf.framework.common.R;
+import com.vincent.rsf.server.common.utils.ExcelUtil;
+import com.vincent.rsf.server.common.annotation.OperationLog;
+import com.vincent.rsf.server.common.domain.BaseParam;
+import com.vincent.rsf.server.common.domain.KeyValVo;
+import com.vincent.rsf.server.common.domain.PageParam;
+import com.vincent.rsf.server.manager.entity.WarehouseAreasItem;
+import com.vincent.rsf.server.manager.service.WarehouseAreasItemService;
+import com.vincent.rsf.server.system.controller.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.*;
+
+@RestController
+public class WarehouseAreasItemController extends BaseController {
+
+    @Autowired
+    private WarehouseAreasItemService warehouseAreasItemService;
+
+    @PreAuthorize("hasAuthority('manager:warehouseAreasItem:list')")
+    @PostMapping("/warehouseAreasItem/page")
+    public R page(@RequestBody Map<String, Object> map) {
+        BaseParam baseParam = buildParam(map, BaseParam.class);
+        PageParam<WarehouseAreasItem, BaseParam> pageParam = new PageParam<>(baseParam, WarehouseAreasItem.class);
+        return R.ok().add(warehouseAreasItemService.page(pageParam, pageParam.buildWrapper(true)));
+    }
+
+    @PreAuthorize("hasAuthority('manager:warehouseAreasItem:list')")
+    @PostMapping("/warehouseAreasItem/list")
+    public R list(@RequestBody Map<String, Object> map) {
+        return R.ok().add(warehouseAreasItemService.list());
+    }
+
+    @PreAuthorize("hasAuthority('manager:warehouseAreasItem:list')")
+    @PostMapping({"/warehouseAreasItem/many/{ids}", "/warehouseAreasItems/many/{ids}"})
+    public R many(@PathVariable Long[] ids) {
+        return R.ok().add(warehouseAreasItemService.listByIds(Arrays.asList(ids)));
+    }
+
+    @PreAuthorize("hasAuthority('manager:warehouseAreasItem:list')")
+    @GetMapping("/warehouseAreasItem/{id}")
+    public R get(@PathVariable("id") Long id) {
+        return R.ok().add(warehouseAreasItemService.getById(id));
+    }
+
+    @PreAuthorize("hasAuthority('manager:warehouseAreasItem:save')")
+    @OperationLog("Create 鏀惰揣鍖哄簱瀛樹俊鎭�")
+    @PostMapping("/warehouseAreasItem/save")
+    public R save(@RequestBody WarehouseAreasItem warehouseAreasItem) {
+        warehouseAreasItem.setCreateBy(getLoginUserId());
+        warehouseAreasItem.setCreateTime(new Date());
+        warehouseAreasItem.setUpdateBy(getLoginUserId());
+        warehouseAreasItem.setUpdateTime(new Date());
+        if (!warehouseAreasItemService.save(warehouseAreasItem)) {
+            return R.error("Save Fail");
+        }
+        return R.ok("Save Success").add(warehouseAreasItem);
+    }
+
+    @PreAuthorize("hasAuthority('manager:warehouseAreasItem:update')")
+    @OperationLog("Update 鏀惰揣鍖哄簱瀛樹俊鎭�")
+    @PostMapping("/warehouseAreasItem/update")
+    public R update(@RequestBody WarehouseAreasItem warehouseAreasItem) {
+        warehouseAreasItem.setUpdateBy(getLoginUserId());
+        warehouseAreasItem.setUpdateTime(new Date());
+        if (!warehouseAreasItemService.updateById(warehouseAreasItem)) {
+            return R.error("Update Fail");
+        }
+        return R.ok("Update Success").add(warehouseAreasItem);
+    }
+
+    @PreAuthorize("hasAuthority('manager:warehouseAreasItem:remove')")
+    @OperationLog("Delete 鏀惰揣鍖哄簱瀛樹俊鎭�")
+    @PostMapping("/warehouseAreasItem/remove/{ids}")
+    public R remove(@PathVariable Long[] ids) {
+        if (!warehouseAreasItemService.removeByIds(Arrays.asList(ids))) {
+            return R.error("Delete Fail");
+        }
+        return R.ok("Delete Success").add(ids);
+    }
+
+    @PreAuthorize("hasAuthority('manager:warehouseAreasItem:list')")
+    @PostMapping("/warehouseAreasItem/query")
+    public R query(@RequestParam(required = false) String condition) {
+        List<KeyValVo> vos = new ArrayList<>();
+        LambdaQueryWrapper<WarehouseAreasItem> wrapper = new LambdaQueryWrapper<>();
+        if (!Cools.isEmpty(condition)) {
+            wrapper.like(WarehouseAreasItem::getId, condition);
+        }
+        warehouseAreasItemService.page(new Page<>(1, 30), wrapper).getRecords().forEach(
+                item -> vos.add(new KeyValVo(item.getId(), item.getId()))
+        );
+        return R.ok().add(vos);
+    }
+
+    @PreAuthorize("hasAuthority('manager:warehouseAreasItem:list')")
+    @PostMapping("/warehouseAreasItem/export")
+    public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
+        ExcelUtil.build(ExcelUtil.create(warehouseAreasItemService.list(), WarehouseAreasItem.class), response);
+    }
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java
index 126d6ce..bff59da 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java
@@ -53,13 +53,13 @@
      * PO鍗曟槑缁嗘爣璇�
      */
     @ApiModelProperty(value= "PO鍗曟槑缁嗘爣璇�")
-    private String poDetlId;
+    private Long poDetlId;
 
     /**
      * PO鍗曟槑缁嗙紪鐮�
      */
-    @ApiModelProperty(value= "PO鍗曟槑缁嗙紪鐮�")
-    private String poDetlCode;
+    @ApiModelProperty(value= "PO鍗曠紪鐮�")
+    private String poCode;
 
     /**
      * 鐗╂枡鏍囪瘑
@@ -114,6 +114,12 @@
      */
     @ApiModelProperty(value= "渚涘簲鍟嗗悕绉�")
     private String splrName;
+
+    /**
+     * 渚涘簲鍟嗘壒娆�
+     */
+    @ApiModelProperty(value = "渚涘簲鍟嗘壒娆�")
+    private String splrBatch;
 
     /**
      * 浜岀淮鐮�
@@ -186,11 +192,11 @@
 
     public AsnOrderItem() {}
 
-    public AsnOrderItem(Long asnId,String asnCode,String poDetlId,String poDetlCode,String matnrId,String matnk,Double anfme,String stockUnit,Double purQty,String purUnit,Double qty,String splrCode,String splrName,String qrcode,String barcode,String packName,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
+    public AsnOrderItem(Long asnId,String asnCode,Long poDetlId,String poCode,String matnrId,String matnk,Double anfme,String stockUnit,Double purQty,String purUnit,Double qty,String splrCode,String splrName,String qrcode,String barcode,String packName,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
         this.asnId = asnId;
         this.asnCode = asnCode;
         this.poDetlId = poDetlId;
-        this.poDetlCode = poDetlCode;
+        this.poCode = poCode;
         this.matnrId = matnrId;
         this.matnk = matnk;
         this.anfme = anfme;
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/PurchaseItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/PurchaseItem.java
index 0ae2108..560b79d 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/PurchaseItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/PurchaseItem.java
@@ -47,7 +47,7 @@
      * erp琛屽彿
      */
     @ApiModelProperty(value= "erp琛屽彿")
-    private String erpItemId;
+    private String platItemId;
 
     /**
      * 鐗╂枡缂栫爜
@@ -170,7 +170,7 @@
 
     public PurchaseItem(Long purchaseId,String erpItemId,String matnrCode,String matnrName,String unit,Double anfme,Double qty,Double nromQty,Double asnQty,Double printQty,String splrName,String splrCode,String splrBatch,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
         this.purchaseId = purchaseId;
-        this.erpItemId = erpItemId;
+        this.platItemId = erpItemId;
         this.matnrCode = matnrCode;
         this.matnrName = matnrName;
         this.unit = unit;
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyInspect.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyInspect.java
index afcf43c..2d29b4a 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyInspect.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyInspect.java
@@ -1,24 +1,19 @@
 package com.vincent.rsf.server.manager.entity;
 
-import com.baomidou.mybatisplus.annotation.TableLogic;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import org.springframework.format.annotation.DateTimeFormat;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
 import com.vincent.rsf.framework.common.Cools;
 import com.vincent.rsf.framework.common.SpringUtils;
-import com.vincent.rsf.server.system.service.UserService;
 import com.vincent.rsf.server.system.entity.User;
+import com.vincent.rsf.server.system.service.UserService;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
 import java.io.Serializable;
+import java.text.SimpleDateFormat;
 import java.util.Date;
 
 @Data
@@ -47,9 +42,39 @@
     private String name;
 
     /**
-     * 鐘舵�� 1: 姝e父  0: 鍐荤粨  
+     * 鏍囩鐮�
      */
-    @ApiModelProperty(value= "鐘舵�� 1: 姝e父  0: 鍐荤粨  ")
+    @ApiModelProperty(value= "鏍囩鐮�")
+    private String barcode;
+
+    /**
+     * 閫氱煡鍗曟槑缁嗘爣璇�
+     */
+    @ApiModelProperty(value= "閫氱煡鍗曟槑缁嗘爣璇�")
+    private Long asnItemId;
+
+    /**
+     * PO鍗曟槑缁嗘爣璇�
+     */
+    @ApiModelProperty(value= "PO鍗曟槑缁嗘爣璇�")
+    private Long poItemId;
+
+    /**
+     * 鍚堟牸鏁伴噺
+     */
+    @ApiModelProperty(value= "鍚堟牸鏁伴噺")
+    private Double safeQty;
+
+    /**
+     * 涓嶅悎鏍兼暟閲�
+     */
+    @ApiModelProperty(value= "涓嶅悎鏍兼暟閲�")
+    private Double disQty;
+
+    /**
+     * 鐘舵�� 3:  閮ㄥ垎鍚堟牸   2: 涓嶅悎鏍�   1: 鍚堟牸   0: 鏈鏌�  
+     */
+    @ApiModelProperty(value= "鐘舵�� 3:  閮ㄥ垎鍚堟牸   2: 涓嶅悎鏍�   1: 鍚堟牸   0: 鏈鏌�  ")
     private Integer status;
 
     /**
@@ -99,9 +124,14 @@
 
     public QlyInspect() {}
 
-    public QlyInspect(String code,String name,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
+    public QlyInspect(String code, String name, String barcode, Long asnItemId, Long poItemId, Double safeQty, Double disQty, Integer status, Integer deleted, Integer tenantId, Long createBy, Date createTime, Long updateBy, Date updateTime, String memo) {
         this.code = code;
         this.name = name;
+        this.barcode = barcode;
+        this.asnItemId = asnItemId;
+        this.poItemId = poItemId;
+        this.safeQty = safeQty;
+        this.disQty = disQty;
         this.status = status;
         this.deleted = deleted;
         this.tenantId = tenantId;
@@ -115,6 +145,11 @@
 //    QlyInspect qlyInspect = new QlyInspect(
 //            null,    // 缂栫爜[闈炵┖]
 //            null,    // 鍚嶇О
+//            null,    // 鏍囩鐮�
+//            null,    // 閫氱煡鍗曟槑缁嗘爣璇�
+//            null,    // PO鍗曟槑缁嗘爣璇�
+//            null,    // 鍚堟牸鏁伴噺
+//            null,    // 涓嶅悎鏍兼暟閲�
 //            null,    // 鐘舵�乕闈炵┖]
 //            null,    // 鏄惁鍒犻櫎[闈炵┖]
 //            null,    // 绉熸埛
@@ -128,10 +163,14 @@
     public String getStatus$(){
         if (null == this.status){ return null; }
         switch (this.status){
-            case 1:
-                return "姝e父";
-            case 0:
-                return "鍐荤粨";
+            case 3:
+                return " 閮ㄥ垎鍚堟牸";
+            case  2:
+                return "涓嶅悎鏍�";
+            case  1:
+                return "鍚堟牸";
+            case  0:
+                return "鏈鏌�";
             default:
                 return String.valueOf(this.status);
         }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/StockItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/StockItem.java
index 31a247a..ad054a0 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/StockItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/StockItem.java
@@ -56,6 +56,10 @@
     @ApiModelProperty(value= "鐗╂枡缂栫爜")
     private String code;
 
+
+    @ApiModelProperty(value = "閫氱煡鍗曟槑缁嗘爣璇�")
+    private Long asnItemId;
+
     /**
      * 鍚嶇О
      */
@@ -254,9 +258,10 @@
 
     public StockItem() {}
 
-    public StockItem(String stockId,Long matnrId,String code,String matnrk,Double anfme,Double workQty,Double qty,Double weight,String unit,Long shipperId,String splrId,String brand,String batch,String prodTime,Long inspectId,String splrBtch,String asnOrder,String erpToken,String erpOrder,String erpStkAdr,Long locId,String barcode,Double purPrice,String lockReason,Short lockStatus,String locker,Date lockedTime,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
+    public StockItem(String stockId,Long matnrId,Long asnItemId, String code,String matnrk,Double anfme,Double workQty,Double qty,Double weight,String unit,Long shipperId,String splrId,String brand,String batch,String prodTime,Long inspectId,String splrBtch,String asnOrder,String erpToken,String erpOrder,String erpStkAdr,Long locId,String barcode,Double purPrice,String lockReason,Short lockStatus,String locker,Date lockedTime,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
         this.stockId = stockId;
         this.matnrId = matnrId;
+        this.asnItemId = asnItemId;
         this.code = code;
         this.matnrk = matnrk;
         this.anfme = anfme;
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreasItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreasItem.java
new file mode 100644
index 0000000..01005f3
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreasItem.java
@@ -0,0 +1,320 @@
+package com.vincent.rsf.server.manager.entity;
+
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import com.vincent.rsf.server.manager.service.CompanysService;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.vincent.rsf.framework.common.Cools;
+import com.vincent.rsf.framework.common.SpringUtils;
+import com.vincent.rsf.server.system.service.UserService;
+import com.vincent.rsf.server.system.entity.User;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@Accessors(chain = true)
+@TableName("man_warehouse_areas_item")
+public class WarehouseAreasItem implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ID
+     */
+    @ApiModelProperty(value= "ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 浠撳簱鍖哄煙
+     */
+    @ApiModelProperty(value= "浠撳簱鍖哄煙")
+    private Long areaId;
+
+    /**
+     * 鍖哄煙鍚嶇О
+     */
+    @ApiModelProperty(value= "鍖哄煙鍚嶇О")
+    private String areaName;
+
+    /**
+     * 鐗╂枡鏍囪瘑
+     */
+    @ApiModelProperty(value= "鐗╂枡鏍囪瘑")
+    private Long matnrId;
+
+    /**
+     * 鐗╂枡鍚嶇О
+     */
+    @ApiModelProperty(value= "鐗╂枡鍚嶇О")
+    private String matnrName;
+
+    /**
+     * 鐗╂枡缂栫爜
+     */
+    @ApiModelProperty(value= "鐗╂枡缂栫爜")
+    private String matnrCode;
+
+    /**
+     * 鏉″舰鐮�
+     */
+    @ApiModelProperty(value= "鏉″舰鐮�")
+    private String barcode;
+
+    /**
+     * 鏁伴噺
+     */
+    @ApiModelProperty(value= "鏁伴噺")
+    private Double anfme;
+
+    /**
+     * 鎵规鍙�
+     */
+    @ApiModelProperty(value= "鎵规鍙�")
+    private String batch;
+
+    /**
+     * 璁¢噺鍗曚綅
+     */
+    @ApiModelProperty(value= "璁¢噺鍗曚綅")
+    private String unit;
+
+    /**
+     * 搴撳瓨鍗曚綅
+     */
+    @ApiModelProperty(value= "搴撳瓨鍗曚綅")
+    private String stockUnit;
+
+    /**
+     * 鍝佺墝
+     */
+    @ApiModelProperty(value= "鍝佺墝")
+    private String brand;
+
+    /**
+     * 璐т富鏍囪瘑
+     */
+    @ApiModelProperty(value= "璐т富鏍囪瘑")
+    private Long shipperId;
+
+    /**
+     * 渚涘簲鍟嗘爣璇�
+     */
+    @ApiModelProperty(value= "渚涘簲鍟嗘爣璇�")
+    private String splrId;
+
+    /**
+     * 鏀惰揣閲嶉噺
+     */
+    @ApiModelProperty(value= "鏀惰揣閲嶉噺")
+    private Double weight;
+
+    /**
+     * 鐢熶骇鏃ユ湡
+     */
+    @ApiModelProperty(value= "鐢熶骇鏃ユ湡")
+    private String prodTime;
+
+    /**
+     * 渚涘簲鍟嗘壒娆�
+     */
+    @ApiModelProperty(value= "渚涘簲鍟嗘壒娆�")
+    private String splrBtch;
+
+    /**
+     * 鐘舵�� 1: 姝e父  0: 鍐荤粨  
+     */
+    @ApiModelProperty(value= "鐘舵�� 1: 姝e父  0: 鍐荤粨  ")
+    private Integer status;
+
+    /**
+     * 鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  
+     */
+    @ApiModelProperty(value= "鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  ")
+    @TableLogic
+    private Integer deleted;
+
+    /**
+     * 绉熸埛
+     */
+    @ApiModelProperty(value= "绉熸埛")
+    private Integer tenantId;
+
+    /**
+     * 娣诲姞浜哄憳
+     */
+    @ApiModelProperty(value= "娣诲姞浜哄憳")
+    private Long createBy;
+
+    /**
+     * 娣诲姞鏃堕棿
+     */
+    @ApiModelProperty(value= "娣诲姞鏃堕棿")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /**
+     * 淇敼浜哄憳
+     */
+    @ApiModelProperty(value= "淇敼浜哄憳")
+    private Long updateBy;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value= "淇敼鏃堕棿")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value= "澶囨敞")
+    private String memo;
+
+    public WarehouseAreasItem() {}
+
+    public WarehouseAreasItem(Long areaId,String areaName,Long matnrId,String matnrName,String matnrCode,String barcode,Double anfme,String batch,String unit,String stockUnit,String brand,Long shipperId,String splrId,Double weight,String prodTime,String splrBtch,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
+        this.areaId = areaId;
+        this.areaName = areaName;
+        this.matnrId = matnrId;
+        this.matnrName = matnrName;
+        this.matnrCode = matnrCode;
+        this.barcode = barcode;
+        this.anfme = anfme;
+        this.batch = batch;
+        this.unit = unit;
+        this.stockUnit = stockUnit;
+        this.brand = brand;
+        this.shipperId = shipperId;
+        this.splrId = splrId;
+        this.weight = weight;
+        this.prodTime = prodTime;
+        this.splrBtch = splrBtch;
+        this.status = status;
+        this.deleted = deleted;
+        this.tenantId = tenantId;
+        this.createBy = createBy;
+        this.createTime = createTime;
+        this.updateBy = updateBy;
+        this.updateTime = updateTime;
+        this.memo = memo;
+    }
+
+//    WarehouseAreasItem warehouseAreasItem = new WarehouseAreasItem(
+//            null,    // 浠撳簱鍖哄煙
+//            null,    // 鍖哄煙鍚嶇О
+//            null,    // 鐗╂枡鏍囪瘑
+//            null,    // 鐗╂枡鍚嶇О
+//            null,    // 鐗╂枡缂栫爜
+//            null,    // 鏉″舰鐮�
+//            null,    // 鏁伴噺[闈炵┖]
+//            null,    // 鎵规鍙�
+//            null,    // 璁¢噺鍗曚綅
+//            null,    // 搴撳瓨鍗曚綅
+//            null,    // 鍝佺墝
+//            null,    // 璐т富鏍囪瘑
+//            null,    // 渚涘簲鍟嗘爣璇�
+//            null,    // 鏀惰揣閲嶉噺
+//            null,    // 鐢熶骇鏃ユ湡
+//            null,    // 渚涘簲鍟嗘壒娆�
+//            null,    // 鐘舵�乕闈炵┖]
+//            null,    // 鏄惁鍒犻櫎[闈炵┖]
+//            null,    // 绉熸埛
+//            null,    // 娣诲姞浜哄憳
+//            null,    // 娣诲姞鏃堕棿[闈炵┖]
+//            null,    // 淇敼浜哄憳
+//            null,    // 淇敼鏃堕棿[闈炵┖]
+//            null    // 澶囨敞
+//    );
+
+    public String getShipperId$(){
+        CompanysService service = SpringUtils.getBean(CompanysService.class);
+        Companys companys = service.getById(this.shipperId);
+        if (!Cools.isEmpty(companys)){
+            return String.valueOf(companys.getName());
+        }
+        return null;
+    }
+
+    public String getSplrId$(){
+        CompanysService service = SpringUtils.getBean(CompanysService.class);
+        Companys companys = service.getById(this.splrId);
+        if (!Cools.isEmpty(companys)){
+            return String.valueOf(companys.getName());
+        }
+        return null;
+    }
+
+    public String getStatus$(){
+        if (null == this.status){ return null; }
+        switch (this.status){
+            case 1:
+                return "姝e父";
+            case 0:
+                return "鍐荤粨";
+            default:
+                return String.valueOf(this.status);
+        }
+    }
+
+    public String getCreateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.getById(this.createBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getNickname());
+        }
+        return null;
+    }
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public String getUpdateBy$(){
+        UserService service = SpringUtils.getBean(UserService.class);
+        User user = service.getById(this.updateBy);
+        if (!Cools.isEmpty(user)){
+            return String.valueOf(user.getNickname());
+        }
+        return null;
+    }
+
+    public String getUpdateTime$(){
+        if (Cools.isEmpty(this.updateTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+    }
+
+
+
+    public Boolean getStatusBool(){
+        if (null == this.status){ return null; }
+        switch (this.status){
+            case 1:
+                return true;
+            case 0:
+                return false;
+            default:
+                return null;
+        }
+    }
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/WarehouseAreasItemMapper.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/WarehouseAreasItemMapper.java
new file mode 100644
index 0000000..41fb1cb
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/WarehouseAreasItemMapper.java
@@ -0,0 +1,12 @@
+package com.vincent.rsf.server.manager.mapper;
+
+import com.vincent.rsf.server.manager.entity.WarehouseAreasItem;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface WarehouseAreasItemMapper extends BaseMapper<WarehouseAreasItem> {
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
index e811c81..c9bedbf 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
@@ -94,12 +94,13 @@
                 AsnOrderItem orderItem = new AsnOrderItem();
                 Matnr matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>().eq(Matnr::getId, item.getMatnrCode()));
                 orderItem.setAnfme(item.getAnfme())
-                        .setAsnId(purchase.getId())
+                        .setAsnId(order.getId())
                         .setQty(item.getQty())
                         .setSplrName(item.getSplrName())
                         .setSplrCode(item.getSplrCode())
                         .setMatnk(item.getMatnrName())
-                        .setPoDetlId(item.getId() + "")
+                        .setPoDetlId(item.getId())
+                        .setPoCode(purchase.getCode())
                         .setPurQty(item.getAnfme())
                         .setPurUnit(item.getUnit())
                         .setMatnk(matnr.getName())
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
new file mode 100644
index 0000000..594363f
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java
@@ -0,0 +1,8 @@
+package com.vincent.rsf.server.manager.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vincent.rsf.server.manager.entity.WarehouseAreasItem;
+
+public interface WarehouseAreasItemService extends IService<WarehouseAreasItem> {
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WarehouseAreasItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WarehouseAreasItemServiceImpl.java
new file mode 100644
index 0000000..430cd8e
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WarehouseAreasItemServiceImpl.java
@@ -0,0 +1,12 @@
+package com.vincent.rsf.server.manager.service.impl;
+
+import com.vincent.rsf.server.manager.mapper.WarehouseAreasItemMapper;
+import com.vincent.rsf.server.manager.entity.WarehouseAreasItem;
+import com.vincent.rsf.server.manager.service.WarehouseAreasItemService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("warehouseAreasItemService")
+public class WarehouseAreasItemServiceImpl extends ServiceImpl<WarehouseAreasItemMapper, WarehouseAreasItem> implements WarehouseAreasItemService {
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/CodeRes.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/CodeRes.java
new file mode 100644
index 0000000..c7ce65b
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/CodeRes.java
@@ -0,0 +1,17 @@
+package com.vincent.rsf.server.system.constant;
+
+import com.vincent.rsf.common.domain.BaseRes;
+
+public interface CodeRes extends BaseRes {
+
+    // user
+    String USER_10001 = "10001-璐﹀彿涓嶅瓨鍦�";
+    String USER_10002 = "10002-璐﹀彿宸茶绂佺敤";
+    String USER_10003 = "10003-瀵嗙爜閿欒";
+
+    String PICK_600 = "600-鎷f枡浠诲姟";
+    String NO_COMB_700 = "700-璇峰厛缁勬墭";
+
+    String SYSTEM_20001 = "20001-璁稿彲璇佸凡澶辨晥";
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/param/LoginParam.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/param/LoginParam.java
index 20cff7c..3e2c437 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/param/LoginParam.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/param/LoginParam.java
@@ -1,5 +1,7 @@
 package com.vincent.rsf.server.system.controller.param;
 
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiParam;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -12,10 +14,13 @@
 
     private static final long serialVersionUID = 1L;
 
+    @ApiModelProperty(value = "鐢ㄦ埛鍚�",required = true)
     private String username;
 
+    @ApiModelProperty(value = "鐧诲綍瀵嗙爜", required = true)
     private String password;
 
+    @ApiModelProperty("绉熻鏍囪瘑")
     private Long tenantId;
 
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/entity/UserLogin.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/entity/UserLogin.java
index a24e3f9..c004083 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/entity/UserLogin.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/entity/UserLogin.java
@@ -1,6 +1,7 @@
 package com.vincent.rsf.server.system.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.vincent.rsf.framework.common.Cools;
@@ -17,7 +18,7 @@
 
 @Data
 @TableName("sys_user_login")
-public class UserLogin implements Serializable {
+public class    UserLogin implements Serializable {
 
     public static final int TYPE_LOGIN = 0;  // 鐧诲綍鎴愬姛
     public static final int TYPE_ERROR = 1;  // 鐧诲綍澶辫触
@@ -74,6 +75,7 @@
     /**
      * 鐧诲綍绯荤粺
      */
+    @TableField("`system`")
     @ApiModelProperty(value= "鐧诲綍绯荤粺")
     private String system;
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/enums/CompanyType.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/enums/CompanyType.java
new file mode 100644
index 0000000..51c9913
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/enums/CompanyType.java
@@ -0,0 +1,27 @@
+package com.vincent.rsf.server.system.enums;
+
+/**
+ * @author Ryan
+ * @version 1.0
+ * @title CompanyType
+ * @description
+ * @create 2025/3/10 16:45
+ */
+public enum CompanyType {
+
+    //閲嶇疆绫诲瀷锛氬勾
+    COMPANY_TYPE_SUPPLIER("supplier", "渚涘簲鍟�"),
+    //閲嶇疆绫诲瀷锛氭湀
+    COMPANY_TYPE_SHIPPER("shipper", "璐т富"),
+    //閲嶇疆绫诲瀷锛氭棩
+    COMPANY_TYPE_CUSTOMER("customer", "瀹㈡埛")
+    ;
+
+    public String type;
+    public String desc;
+
+    CompanyType(String type , String desc) {
+        this.type = type;
+        this.desc = desc;
+    }
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/enums/LoginSystemType.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/enums/LoginSystemType.java
new file mode 100644
index 0000000..66afbd5
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/enums/LoginSystemType.java
@@ -0,0 +1,13 @@
+package com.vincent.rsf.server.system.enums;
+
+/**
+ * 鐧诲綍绯荤粺绫诲瀷鏋氫妇
+ */
+public enum LoginSystemType {
+
+    WMS,
+    WMS_PDA,
+    WCS
+    ;
+
+}
diff --git a/rsf-server/src/main/java/purchaseItem.sql b/rsf-server/src/main/java/purchaseItem.sql
index acb3d51..e91d389 100644
--- a/rsf-server/src/main/java/purchaseItem.sql
+++ b/rsf-server/src/main/java/purchaseItem.sql
@@ -13,7 +13,7 @@
 -- locale field
 purchaseItem: {
     purchaseId: "purchaseId",
-    erpItemId: "erpItemId",
+    platItemId: "erpItemId",
     matnrCode: "matnrCode",
     matnrName: "matnrName",
     unit: "unit",
diff --git a/rsf-server/src/main/java/warehouseAreasItem.sql b/rsf-server/src/main/java/warehouseAreasItem.sql
new file mode 100644
index 0000000..303856a
--- /dev/null
+++ b/rsf-server/src/main/java/warehouseAreasItem.sql
@@ -0,0 +1,37 @@
+-- save warehouseAreasItem record
+-- mysql
+insert into `sys_menu` ( `name`, `parent_id`, `route`, `component`, `type`, `sort`, `tenant_id`, `status`) values ( 'menu.warehouseAreasItem', '0', '/manager/warehouseAreasItem', 'warehouseAreasItem', '0' , '0', '1' , '1');
+
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Query 鏀惰揣鍖哄簱瀛樹俊鎭�', '', '1', 'manager:warehouseAreasItem:list', '0', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Create 鏀惰揣鍖哄簱瀛樹俊鎭�', '', '1', 'manager:warehouseAreasItem:save', '1', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Update 鏀惰揣鍖哄簱瀛樹俊鎭�', '', '1', 'manager:warehouseAreasItem:update', '2', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Delete 鏀惰揣鍖哄簱瀛樹俊鎭�', '', '1', 'manager:warehouseAreasItem:remove', '3', '1', '1');
+
+-- locale menu name
+warehouseAreasItem: 'WarehouseAreasItem',
+
+-- locale field
+warehouseAreasItem: {
+    areaId: "areaId",
+    areaName: "areaName",
+    matnrId: "matnrId",
+    matnrName: "matnrName",
+    matnrCode: "matnrCode",
+    barcode: "barcode",
+    anfme: "anfme",
+    batch: "batch",
+    unit: "unit",
+    stockUnit: "stockUnit",
+    brand: "brand",
+    shipperId: "shipperId",
+    splrId: "splrId",
+    weight: "weight",
+    prodTime: "prodTime",
+    splrBtch: "splrBtch",
+},
+
+-- ResourceContent
+import warehouseAreasItem from './warehouseAreasItem';
+
+case 'warehouseAreasItem':
+    return warehouseAreasItem;
diff --git a/rsf-server/src/main/resources/application-dev.yml b/rsf-server/src/main/resources/application-dev.yml
index 98555cf..20d38b4 100644
--- a/rsf-server/src/main/resources/application-dev.yml
+++ b/rsf-server/src/main/resources/application-dev.yml
@@ -80,7 +80,7 @@
     #鎺ュ彛鏄庣粏
     api:
       #璐ㄦ涓婃姤鎺ュ彛
-      notifyInspect: /report/inspect
+      notify-inspect: /report/inspect
 
 #浠撳簱鍔熻兘鍙傛暟閰嶇疆
 stock:
diff --git a/rsf-server/src/main/resources/application.yml b/rsf-server/src/main/resources/application.yml
index d56421e..94a4edf 100644
--- a/rsf-server/src/main/resources/application.yml
+++ b/rsf-server/src/main/resources/application.yml
@@ -23,7 +23,7 @@
   #  global-config:
   #    field-strategy: 0
   configuration:
-#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
     map-underscore-to-camel-case: true
     cache-enabled: true
   global-config:
@@ -33,6 +33,9 @@
       logic-delete-value: 1
       logic-not-delete-value: 0
 
+super:
+  pwd: xltys1995
+
 logging:
   file:
     path: logs/@pom.artifactId@
diff --git a/rsf-server/src/main/resources/mapper/manager/WarehouseAreasItemMapper.xml b/rsf-server/src/main/resources/mapper/manager/WarehouseAreasItemMapper.xml
new file mode 100644
index 0000000..28d48ba
--- /dev/null
+++ b/rsf-server/src/main/resources/mapper/manager/WarehouseAreasItemMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vincent.rsf.server.manager.mapper.WarehouseAreasItemMapper">
+
+</mapper>
diff --git a/rsf-server/src/main/resources/mapper/test/QlyInspectMapper.xml b/rsf-server/src/main/resources/mapper/test/QlyInspectMapper.xml
new file mode 100644
index 0000000..c40f619
--- /dev/null
+++ b/rsf-server/src/main/resources/mapper/test/QlyInspectMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vincent.rsf.server.test.mapper.QlyInspectMapper">
+
+</mapper>

--
Gitblit v1.9.1