From dfe8dff347916be46691fc5d956c45880c4446de Mon Sep 17 00:00:00 2001
From: verou <857149855@qq.com>
Date: 星期一, 10 三月 2025 11:44:52 +0800
Subject: [PATCH] fix:规则子项

---
 rsf-server/src/main/java/asnOrder.sql                                                         |    1 
 rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java                       |    6 
 rsf-admin/src/page/system/serialRule/index.jsx                                                |    0 
 rsf-admin/src/page/system/dicts/dictType/DictTypeCreate.jsx                                   |    6 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java |   46 ++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrder.java                  |    6 
 rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx                                     |    8 
 rsf-admin/src/i18n/en.js                                                                      |   84 +++++
 rsf-admin/src/page/ResourceContent.js                                                         |   22 +
 rsf-server/src/main/java/purchase.sql                                                         |   14 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java    |   19 +
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Purchase.java                  |   11 
 rsf-admin/src/page/system/serialRuleItem/index.jsx                                            |    0 
 rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ErpInspectParams.java       |   36 ++
 rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx                                     |   12 
 rsf-admin/src/page/system/dicts/dictData/DictDataPanel.jsx                                    |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/ErpApiService.java                |    3 
 rsf-server/src/main/java/com/vincent/rsf/server/system/utils/SerialRuleUtils.java             |    2 
 rsf-admin/src/page/basicInfo/loc/LocEdit.jsx                                                  |    8 
 rsf-server/src/main/java/com/vincent/rsf/server/api/config/RemotesInfoProperties.java         |   46 ++
 rsf-admin/src/page/system/serialRuleItem/SerialRuleItemList.jsx                               |    0 
 rsf-admin/src/page/system/serialRule/SerialRuleEdit.jsx                                       |    8 
 rsf-admin/src/page/system/serialRule/SerialRulePanel.jsx                                      |    2 
 rsf-server/src/main/java/asnOrderItem.sql                                                     |    9 
 rsf-server/src/main/java/com/vincent/rsf/server/common/config/SysStockProperties.java         |   48 +++
 rsf-admin/src/page/system/dicts/dictType/DictTypeEdit.jsx                                     |    8 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java           |   16 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/PurchaseMapper.java            |    6 
 rsf-admin/src/page/basicInfo/loc/LocCreate.jsx                                                |    6 
 rsf-admin/src/i18n/zh.js                                                                      |   69 ++++
 rsf-admin/src/page/system/dicts/dictData/DictDataCreate.jsx                                   |    6 
 rsf-common/src/main/java/com/vincent/rsf/common/domain/CommonReponse.java                     |   31 +
 rsf-server/src/main/resources/application-dev.yml                                             |   30 +
 rsf-admin/src/page/system/serialRuleItem/SerialRuleItemCreate.jsx                             |    6 
 rsf-admin/src/page/system/serialRule/SerialRuleList.jsx                                       |    0 
 rsf-admin/src/page/basicInfo/loc/index.jsx                                                    |    0 
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ErpApiServiceImpl.java       |  147 ++++++++
 rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java           |    8 
 rsf-admin/src/page/system/serialRule/SerialRuleCreate.jsx                                     |    0 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/PurchaseItem.java              |    6 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderService.java          |    3 
 rsf-server/src/main/resources/mapper/manager/PurchaseMapper.xml                               |   23 +
 rsf-admin/src/page/system/serialRuleItem/SerialRuleItemEdit.jsx                               |    8 
 rsf-admin/src/page/basicInfo/loc/LocList.jsx                                                  |   10 
 rsf-admin/src/page/system/dicts/dictType/DictTypePanel.jsx                                    |    2 
 rsf-admin/src/page/system/dicts/dictData/index.jsx                                            |    0 
 rsf-admin/src/page/system/dicts/dictType/index.jsx                                            |    0 
 rsf-admin/src/page/system/serialRule/SerialRuleDetail.jsx                                     |    0 
 rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ErpInspectItem.java         |   38 ++
 rsf-server/src/main/resources/application-prod.yml                                            |    5 
 rsf-server/src/main/java/com/vincent/rsf/server/api/config/RestTemplateConfig.java            |   22 +
 rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/PoItemsDto.java                |   43 ++
 rsf-server/src/main/java/purchaseItem.sql                                                     |   18 
 rsf-admin/src/page/system/dicts/dictType/DictTypeList.jsx                                     |   10 
 rsf-admin/src/page/system/serialRuleItem/SerialRuleItemPanel.jsx                              |    2 
 rsf-admin/src/page/basicInfo/loc/LocPanel.jsx                                                 |    2 
 56 files changed, 825 insertions(+), 99 deletions(-)

diff --git a/rsf-admin/src/i18n/en.js b/rsf-admin/src/i18n/en.js
index 052d395..e2a33b9 100644
--- a/rsf-admin/src/i18n/en.js
+++ b/rsf-admin/src/i18n/en.js
@@ -135,6 +135,10 @@
         companys: 'Companys',
         serialRuleItem: 'SerialRuleItem',
         serialRule: 'SerialRule',
+        asnOrder: 'AsnOrder',
+        asnOrderItem: 'AsnOrderItem',
+        purchase: 'Purchase',
+        purchaseItem: 'PurchaseItem',
         whMat: 'Warehouse Mat',
     },
     table: {
@@ -396,7 +400,85 @@
                 size: "size",
                 minWeight: "minWeight",
                 maxWeight: "maxWeight",
-            }
+            },
+            asnOrder: {
+                code: "Code",
+                poCode: "poCode",
+                poId: "poId",
+                type: "Type",
+                wkType: "wkType",
+                anfme: "anfme",
+                qty: "qty",
+                logisNo: "logisNo",
+                arrTime: "Arrived",
+                rleStatus: "Release",
+                ntyStatus: "Notify",
+            },
+            asnOrderItem: {
+                asnId: "asnId",
+                asnCode: "asnCode",
+                poDetlId: "poDetlId",
+                poDetlCode: "poDetlCode",
+                matnrId: "matnrId",
+                matnk: "matnk",
+                anfme: "anfme",
+                stockUnit: "stockUnit",
+                purQty: "purQty",
+                purUnit: "purUnit",
+                qty: "qty",
+                splrCode: "splrCode",
+                splrName: "splrName",
+                qrcode: "qrcode",
+                barcode: "barcode",
+                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",
+                type: "type",
+                wkType: "wkType",
+                source: "source",
+                preArr: "preArr",
+                anfme: "anfme",
+                qty: "qty",
+                workQty: "workQty",
+                channel: "channel",
+                erpCode: "erpCode",
+                project: "project",
+                startTime: "startTime",
+                endTime: "endTime",
+            },
+            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",
+            },
         }
     },
     page: {
diff --git a/rsf-admin/src/i18n/zh.js b/rsf-admin/src/i18n/zh.js
index 4711164..a5b8c10 100644
--- a/rsf-admin/src/i18n/zh.js
+++ b/rsf-admin/src/i18n/zh.js
@@ -134,6 +134,10 @@
         companys: '寰�鏉ヤ紒涓�',
         serialRuleItem: '缂栫爜瑙勫垯瀛愯〃',
         serialRule: '缂栫爜瑙勫垯',
+        asnOrder: '鏀惰揣閫氱煡鍗�',
+        asnOrderItem: '鏀惰揣鏄庣粏',
+        purchase: 'PO鍗�',
+        purchaseItem: 'PO鍗曟槑缁�',
         whMat: '搴撳尯鐗╂枡鍏崇郴',
     },
     table: {
@@ -396,7 +400,70 @@
                 size: "灏哄",
                 minWeight: "鏈�灏忛噸閲�",
                 maxWeight: "鏈�澶ч噸閲�",
-            }
+            },
+            asnOrder: {
+                code: "缂栫爜",
+                poCode: "PO缂栫爜",
+                poId: "PO鏍囪瘑",
+                type: "鍗曟嵁绫诲瀷",
+                wkType: "涓氬姟绫诲瀷",
+                anfme: "鏁伴噺",
+                qty: "宸插畬鎴愭暟閲�",
+                logisNo: "logisNo",
+                arrTime: "棰勮鍒拌揪鏃堕棿",
+                rleStatus: "閲婃斁鐘舵��",
+                ntyStatus: "璐ㄦ涓婃姤鐘舵��",
+            },
+            asnOrderItem: {
+                asnId: "涓诲崟鏍囪瘑",
+                asnCode: "涓诲崟缂栫爜",
+                poDetlId: "PO鍗曟爣璇�",
+                poDetlCode: "PO鍗曠紪鐮�",
+                matnrId: "鐗╂枡鏍囪瘑",
+                matnk: "鐗╂枡鍚嶇О",
+                anfme: "鏁伴噺",
+                stockUnit: "搴撳瓨鍗曚綅",
+                purQty: "閲囪喘鏁伴噺",
+                purUnit: "閲囪喘鍗曚綅",
+                qty: "宸插畬鎴愭暟閲�",
+                splrCode: "渚涘簲鍟嗙紪鐮�",
+                splrName: "渚涘簲鍟嗗悕绉�",
+                qrcode: "浜岀淮鐮�",
+                barcode: "鏉″舰鐮�",
+                packName: "鍖呰鍚嶇О",
+                ntyStatus: "鎶ユ鐘舵��",
+            },
+            purchase: {
+                code: "缂栫爜",
+                erpId: "erp鏍囪瘑",
+                type: "鍗曟嵁绫诲瀷",
+                wkType: "涓氬姟绫诲瀷",
+                source: "鏉ユ簮",
+                preArr: "棰勮鍒拌揪",
+                anfme: "鏁伴噺",
+                qty: "宸插畬鎴愭暟閲�",
+                workQty: "鎵ц涓暟閲�",
+                channel: "鏀惰揣閫氶亾",
+                erpCode: "Erp缂栫爜",
+                project: "椤圭洰鍚嶇О",
+                startTime: "寮�濮嬫椂闂�",
+                endTime: "缁撴潫鏃堕棿",
+            },
+            purchaseItem: {
+                purchaseId: "PO涓诲崟鏍囪瘑",
+                erpItemId: "erp鏄庣粏鏍囪瘑",
+                matnrCode: "鐗╂枡缂栫爜",
+                matnrName: "鐗╂枡鍚嶇О",
+                unit: "璁¢噺鍗曚綅",
+                anfme: "鏁伴噺",
+                qty: "宸插畬鎴�",
+                nromQty: "鏍囧寘鏁伴噺",
+                asnQty:  "鍗曟嵁鏁伴噺",
+                printQty: "鎵撳嵃鏁伴噺",
+                splrName: "渚涘簲鍟嗗悕绉�",
+                splrCode: "渚涘簲鍟嗙紪鐮�",
+                splrBatch: "渚涘簲鍟嗘壒娆�",
+            },
         }
     },
     page: {
diff --git a/rsf-admin/src/page/ResourceContent.js b/rsf-admin/src/page/ResourceContent.js
index d8753d0..448aec3 100644
--- a/rsf-admin/src/page/ResourceContent.js
+++ b/rsf-admin/src/page/ResourceContent.js
@@ -17,16 +17,20 @@
 import matnrGroup from './basicInfo/matnrGroup';
 import warehouse from './basicInfo/warehouse';
 import warehouseAreas from './warehouseAreas';
-import loc from './loc';
+import loc from './basicInfo/loc';
 import container from './container';
 import contract from './contract';
 import qlyInspect from './qlyInspect';
-import dictType from './dictType';
-import dictData from './dictData';
+import dictType from './system/dicts/dictType';
+import dictData from './system/dicts/dictData';
 import companys from './basicInfo/companys';
-import serialRuleItem from './serialRuleItem';
-import serialRule from './serialRule';
+import serialRuleItem from './system/serialRuleItem';
+import serialRule from './system/serialRule';
 import whMat from './basicInfo/whMat';
+import asnOrder from './asnOrder';
+import asnOrderItem from './asnOrderItem';
+import purchaseItem from './purchaseItem';
+import purchase from './purchase';
 
 
 const ResourceContent = (node) => {
@@ -77,6 +81,14 @@
             return serialRule;
         case 'whMat':
             return whMat;
+        case 'asnOrder':
+            return asnOrder;
+        case 'asnOrderItem':
+            return asnOrderItem;
+        case 'purchaseItem':
+            return purchaseItem;
+        case 'purchase':
+            return purchase;
         default:
             return {
                 list: ListGuesser,
diff --git a/rsf-admin/src/page/loc/LocCreate.jsx b/rsf-admin/src/page/basicInfo/loc/LocCreate.jsx
similarity index 97%
rename from rsf-admin/src/page/loc/LocCreate.jsx
rename to rsf-admin/src/page/basicInfo/loc/LocCreate.jsx
index 472ecfd..831412b 100644
--- a/rsf-admin/src/page/loc/LocCreate.jsx
+++ b/rsf-admin/src/page/basicInfo/loc/LocCreate.jsx
@@ -27,9 +27,9 @@
     Grid,
     Box,
 } from '@mui/material';
-import DialogCloseButton from "../components/DialogCloseButton";
-import StatusSelectInput from "../components/StatusSelectInput";
-import MemoInput from "../components/MemoInput";
+import DialogCloseButton from "../../components/DialogCloseButton";
+import StatusSelectInput from "../../components/StatusSelectInput";
+import MemoInput from "../../components/MemoInput";
 
 const LocCreate = (props) => {
     const { open, setOpen } = props;
diff --git a/rsf-admin/src/page/loc/LocEdit.jsx b/rsf-admin/src/page/basicInfo/loc/LocEdit.jsx
similarity index 97%
rename from rsf-admin/src/page/loc/LocEdit.jsx
rename to rsf-admin/src/page/basicInfo/loc/LocEdit.jsx
index 2b04603..c8c7fcb 100644
--- a/rsf-admin/src/page/loc/LocEdit.jsx
+++ b/rsf-admin/src/page/basicInfo/loc/LocEdit.jsx
@@ -24,10 +24,10 @@
 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";
+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();
diff --git a/rsf-admin/src/page/loc/LocList.jsx b/rsf-admin/src/page/basicInfo/loc/LocList.jsx
similarity index 96%
rename from rsf-admin/src/page/loc/LocList.jsx
rename to rsf-admin/src/page/basicInfo/loc/LocList.jsx
index 1392d7d..1980da5 100644
--- a/rsf-admin/src/page/loc/LocList.jsx
+++ b/rsf-admin/src/page/basicInfo/loc/LocList.jsx
@@ -36,11 +36,11 @@
 import { styled } from '@mui/material/styles';
 import LocCreate from "./LocCreate";
 import LocPanel from "./LocPanel";
-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 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';
 
diff --git a/rsf-admin/src/page/loc/LocPanel.jsx b/rsf-admin/src/page/basicInfo/loc/LocPanel.jsx
similarity index 98%
rename from rsf-admin/src/page/loc/LocPanel.jsx
rename to rsf-admin/src/page/basicInfo/loc/LocPanel.jsx
index 2a429ec..323cfb7 100644
--- a/rsf-admin/src/page/loc/LocPanel.jsx
+++ b/rsf-admin/src/page/basicInfo/loc/LocPanel.jsx
@@ -4,7 +4,7 @@
     useTranslate,
     useRecordContext,
 } from 'react-admin';
-import PanelTypography from "../components/PanelTypography";
+import PanelTypography from "../../components/PanelTypography";
 import * as Common from '@/utils/common'
 
 const LocPanel = () => {
diff --git a/rsf-admin/src/page/loc/index.jsx b/rsf-admin/src/page/basicInfo/loc/index.jsx
similarity index 100%
rename from rsf-admin/src/page/loc/index.jsx
rename to rsf-admin/src/page/basicInfo/loc/index.jsx
diff --git a/rsf-admin/src/page/dictData/DictDataCreate.jsx b/rsf-admin/src/page/system/dicts/dictData/DictDataCreate.jsx
similarity index 96%
rename from rsf-admin/src/page/dictData/DictDataCreate.jsx
rename to rsf-admin/src/page/system/dicts/dictData/DictDataCreate.jsx
index 2c609cc..cc98111 100644
--- a/rsf-admin/src/page/dictData/DictDataCreate.jsx
+++ b/rsf-admin/src/page/system/dicts/dictData/DictDataCreate.jsx
@@ -27,9 +27,9 @@
     Grid,
     Box,
 } from '@mui/material';
-import DialogCloseButton from "../components/DialogCloseButton";
-import StatusSelectInput from "../components/StatusSelectInput";
-import MemoInput from "../components/MemoInput";
+import DialogCloseButton from "../../../components/DialogCloseButton";
+import StatusSelectInput from "../../../components/StatusSelectInput";
+import MemoInput from "../../../components/MemoInput";
 
 const DictDataCreate = (props) => {
     const { open, setOpen } = props;
diff --git a/rsf-admin/src/page/dictData/DictDataEdit.jsx b/rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx
similarity index 94%
rename from rsf-admin/src/page/dictData/DictDataEdit.jsx
rename to rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx
index 6eed851..6190953 100644
--- a/rsf-admin/src/page/dictData/DictDataEdit.jsx
+++ b/rsf-admin/src/page/system/dicts/dictData/DictDataEdit.jsx
@@ -24,10 +24,10 @@
 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";
+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();
diff --git a/rsf-admin/src/page/dictData/DictDataList.jsx b/rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx
similarity index 94%
rename from rsf-admin/src/page/dictData/DictDataList.jsx
rename to rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx
index 0770711..65ea973 100644
--- a/rsf-admin/src/page/dictData/DictDataList.jsx
+++ b/rsf-admin/src/page/system/dicts/dictData/DictDataList.jsx
@@ -36,14 +36,14 @@
 import { styled } from '@mui/material/styles';
 import DictDataCreate from "./DictDataCreate";
 import DictDataPanel from "./DictDataPanel";
-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 EmptyData from "../../../components/EmptyData";
+import MyCreateButton from "../../../components/MyCreateButton";
+import MyExportButton from '../../../components/MyExportButton';
+import PageDrawer from "../../../components/PageDrawer";
+import MyField from "../../../components/MyField";
 import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
 import * as Common from '@/utils/common';
-import CustomerTopToolBar from "../components/EditTopToolBar";
+import CustomerTopToolBar from "../../../components/EditTopToolBar";
 
 
 const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
diff --git a/rsf-admin/src/page/dictData/DictDataPanel.jsx b/rsf-admin/src/page/system/dicts/dictData/DictDataPanel.jsx
similarity index 98%
rename from rsf-admin/src/page/dictData/DictDataPanel.jsx
rename to rsf-admin/src/page/system/dicts/dictData/DictDataPanel.jsx
index 557a79c..1f38976 100644
--- a/rsf-admin/src/page/dictData/DictDataPanel.jsx
+++ b/rsf-admin/src/page/system/dicts/dictData/DictDataPanel.jsx
@@ -4,7 +4,7 @@
     useTranslate,
     useRecordContext,
 } from 'react-admin';
-import PanelTypography from "../components/PanelTypography";
+import PanelTypography from "../../../components/PanelTypography";
 import * as Common from '@/utils/common'
 
 const DictDataPanel = () => {
diff --git a/rsf-admin/src/page/dictData/index.jsx b/rsf-admin/src/page/system/dicts/dictData/index.jsx
similarity index 100%
rename from rsf-admin/src/page/dictData/index.jsx
rename to rsf-admin/src/page/system/dicts/dictData/index.jsx
diff --git a/rsf-admin/src/page/dictType/DictTypeCreate.jsx b/rsf-admin/src/page/system/dicts/dictType/DictTypeCreate.jsx
similarity index 95%
rename from rsf-admin/src/page/dictType/DictTypeCreate.jsx
rename to rsf-admin/src/page/system/dicts/dictType/DictTypeCreate.jsx
index d652cba..9c17b03 100644
--- a/rsf-admin/src/page/dictType/DictTypeCreate.jsx
+++ b/rsf-admin/src/page/system/dicts/dictType/DictTypeCreate.jsx
@@ -27,9 +27,9 @@
     Grid,
     Box,
 } from '@mui/material';
-import DialogCloseButton from "../components/DialogCloseButton";
-import StatusSelectInput from "../components/StatusSelectInput";
-import MemoInput from "../components/MemoInput";
+import DialogCloseButton from "../../../components/DialogCloseButton";
+import StatusSelectInput from "../../../components/StatusSelectInput";
+import MemoInput from "../../../components/MemoInput";
 
 const DictTypeCreate = (props) => {
     const { open, setOpen } = props;
diff --git a/rsf-admin/src/page/dictType/DictTypeEdit.jsx b/rsf-admin/src/page/system/dicts/dictType/DictTypeEdit.jsx
similarity index 92%
rename from rsf-admin/src/page/dictType/DictTypeEdit.jsx
rename to rsf-admin/src/page/system/dicts/dictType/DictTypeEdit.jsx
index 96ace70..6155c7b 100644
--- a/rsf-admin/src/page/dictType/DictTypeEdit.jsx
+++ b/rsf-admin/src/page/system/dicts/dictType/DictTypeEdit.jsx
@@ -24,10 +24,10 @@
 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";
+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();
diff --git a/rsf-admin/src/page/dictType/DictTypeList.jsx b/rsf-admin/src/page/system/dicts/dictType/DictTypeList.jsx
similarity index 94%
rename from rsf-admin/src/page/dictType/DictTypeList.jsx
rename to rsf-admin/src/page/system/dicts/dictType/DictTypeList.jsx
index dc30eae..4fc1553 100644
--- a/rsf-admin/src/page/dictType/DictTypeList.jsx
+++ b/rsf-admin/src/page/system/dicts/dictType/DictTypeList.jsx
@@ -36,11 +36,11 @@
 import { styled } from '@mui/material/styles';
 import DictTypeCreate from "./DictTypeCreate";
 import DictTypePanel from "./DictTypePanel";
-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 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';
 
diff --git a/rsf-admin/src/page/dictType/DictTypePanel.jsx b/rsf-admin/src/page/system/dicts/dictType/DictTypePanel.jsx
similarity index 97%
rename from rsf-admin/src/page/dictType/DictTypePanel.jsx
rename to rsf-admin/src/page/system/dicts/dictType/DictTypePanel.jsx
index 3c6e787..88fa553 100644
--- a/rsf-admin/src/page/dictType/DictTypePanel.jsx
+++ b/rsf-admin/src/page/system/dicts/dictType/DictTypePanel.jsx
@@ -4,7 +4,7 @@
     useTranslate,
     useRecordContext,
 } from 'react-admin';
-import PanelTypography from "../components/PanelTypography";
+import PanelTypography from "../../../components/PanelTypography";
 import * as Common from '@/utils/common'
 
 const DictTypePanel = () => {
diff --git a/rsf-admin/src/page/dictType/index.jsx b/rsf-admin/src/page/system/dicts/dictType/index.jsx
similarity index 100%
rename from rsf-admin/src/page/dictType/index.jsx
rename to rsf-admin/src/page/system/dicts/dictType/index.jsx
diff --git a/rsf-admin/src/page/serialRule/SerialRuleCreate.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleCreate.jsx
similarity index 100%
rename from rsf-admin/src/page/serialRule/SerialRuleCreate.jsx
rename to rsf-admin/src/page/system/serialRule/SerialRuleCreate.jsx
diff --git a/rsf-admin/src/page/serialRule/SerialRuleDetail.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleDetail.jsx
similarity index 100%
rename from rsf-admin/src/page/serialRule/SerialRuleDetail.jsx
rename to rsf-admin/src/page/system/serialRule/SerialRuleDetail.jsx
diff --git a/rsf-admin/src/page/serialRule/SerialRuleEdit.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleEdit.jsx
similarity index 94%
rename from rsf-admin/src/page/serialRule/SerialRuleEdit.jsx
rename to rsf-admin/src/page/system/serialRule/SerialRuleEdit.jsx
index 2b03b81..4440c43 100644
--- a/rsf-admin/src/page/serialRule/SerialRuleEdit.jsx
+++ b/rsf-admin/src/page/system/serialRule/SerialRuleEdit.jsx
@@ -24,10 +24,10 @@
 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";
+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();
diff --git a/rsf-admin/src/page/serialRule/SerialRuleList.jsx b/rsf-admin/src/page/system/serialRule/SerialRuleList.jsx
similarity index 100%
rename from rsf-admin/src/page/serialRule/SerialRuleList.jsx
rename to rsf-admin/src/page/system/serialRule/SerialRuleList.jsx
diff --git a/rsf-admin/src/page/serialRule/SerialRulePanel.jsx b/rsf-admin/src/page/system/serialRule/SerialRulePanel.jsx
similarity index 98%
rename from rsf-admin/src/page/serialRule/SerialRulePanel.jsx
rename to rsf-admin/src/page/system/serialRule/SerialRulePanel.jsx
index e3a0a7f..8349792 100644
--- a/rsf-admin/src/page/serialRule/SerialRulePanel.jsx
+++ b/rsf-admin/src/page/system/serialRule/SerialRulePanel.jsx
@@ -4,7 +4,7 @@
     useTranslate,
     useRecordContext,
 } from 'react-admin';
-import PanelTypography from "../components/PanelTypography";
+import PanelTypography from "../../components/PanelTypography";
 import * as Common from '@/utils/common'
 
 const SerialRulePanel = () => {
diff --git a/rsf-admin/src/page/serialRule/index.jsx b/rsf-admin/src/page/system/serialRule/index.jsx
similarity index 100%
rename from rsf-admin/src/page/serialRule/index.jsx
rename to rsf-admin/src/page/system/serialRule/index.jsx
diff --git a/rsf-admin/src/page/serialRuleItem/SerialRuleItemCreate.jsx b/rsf-admin/src/page/system/serialRuleItem/SerialRuleItemCreate.jsx
similarity index 96%
rename from rsf-admin/src/page/serialRuleItem/SerialRuleItemCreate.jsx
rename to rsf-admin/src/page/system/serialRuleItem/SerialRuleItemCreate.jsx
index 18f73aa..f51326e 100644
--- a/rsf-admin/src/page/serialRuleItem/SerialRuleItemCreate.jsx
+++ b/rsf-admin/src/page/system/serialRuleItem/SerialRuleItemCreate.jsx
@@ -27,9 +27,9 @@
     Grid,
     Box,
 } from '@mui/material';
-import DialogCloseButton from "../components/DialogCloseButton";
-import StatusSelectInput from "../components/StatusSelectInput";
-import MemoInput from "../components/MemoInput";
+import DialogCloseButton from "../../components/DialogCloseButton";
+import StatusSelectInput from "../../components/StatusSelectInput";
+import MemoInput from "../../components/MemoInput";
 
 const SerialRuleItemCreate = (props) => {
     const { open, setOpen } = props;
diff --git a/rsf-admin/src/page/serialRuleItem/SerialRuleItemEdit.jsx b/rsf-admin/src/page/system/serialRuleItem/SerialRuleItemEdit.jsx
similarity index 94%
rename from rsf-admin/src/page/serialRuleItem/SerialRuleItemEdit.jsx
rename to rsf-admin/src/page/system/serialRuleItem/SerialRuleItemEdit.jsx
index edec115..ecd5ba0 100644
--- a/rsf-admin/src/page/serialRuleItem/SerialRuleItemEdit.jsx
+++ b/rsf-admin/src/page/system/serialRuleItem/SerialRuleItemEdit.jsx
@@ -24,10 +24,10 @@
 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";
+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();
diff --git a/rsf-admin/src/page/serialRuleItem/SerialRuleItemList.jsx b/rsf-admin/src/page/system/serialRuleItem/SerialRuleItemList.jsx
similarity index 100%
rename from rsf-admin/src/page/serialRuleItem/SerialRuleItemList.jsx
rename to rsf-admin/src/page/system/serialRuleItem/SerialRuleItemList.jsx
diff --git a/rsf-admin/src/page/serialRuleItem/SerialRuleItemPanel.jsx b/rsf-admin/src/page/system/serialRuleItem/SerialRuleItemPanel.jsx
similarity index 98%
rename from rsf-admin/src/page/serialRuleItem/SerialRuleItemPanel.jsx
rename to rsf-admin/src/page/system/serialRuleItem/SerialRuleItemPanel.jsx
index 6561de2..47d94ce 100644
--- a/rsf-admin/src/page/serialRuleItem/SerialRuleItemPanel.jsx
+++ b/rsf-admin/src/page/system/serialRuleItem/SerialRuleItemPanel.jsx
@@ -4,7 +4,7 @@
     useTranslate,
     useRecordContext,
 } from 'react-admin';
-import PanelTypography from "../components/PanelTypography";
+import PanelTypography from "../../components/PanelTypography";
 import * as Common from '@/utils/common'
 
 const SerialRuleItemPanel = () => {
diff --git a/rsf-admin/src/page/serialRuleItem/index.jsx b/rsf-admin/src/page/system/serialRuleItem/index.jsx
similarity index 100%
rename from rsf-admin/src/page/serialRuleItem/index.jsx
rename to rsf-admin/src/page/system/serialRuleItem/index.jsx
diff --git a/rsf-common/src/main/java/com/vincent/rsf/common/domain/CommonReponse.java b/rsf-common/src/main/java/com/vincent/rsf/common/domain/CommonReponse.java
new file mode 100644
index 0000000..c4cacb9
--- /dev/null
+++ b/rsf-common/src/main/java/com/vincent/rsf/common/domain/CommonReponse.java
@@ -0,0 +1,31 @@
+package com.vincent.rsf.common.domain;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.util.Map;
+
+/***
+ * 涓嬪彂浠诲姟鍝嶅簲Bean
+ */
+@Data
+@Accessors(chain = true)
+public class CommonReponse implements Serializable {
+
+    /***
+     * 鍝嶅簲鐘舵�佺爜銆�
+     * 飦�0锛氳〃绀烘帴鍙h姹傛垚鍔熴��
+     * 鍏朵粬鍊硷細琛ㄧず鎺ュ彛璇锋眰澶辫触锛岃缁嗕俊鎭鍙傝�冮敊璇爜銆�
+     */
+    private Integer code;
+    /**
+     *杩斿洖淇℃伅璇存槑銆�
+     * 飦垚鍔燂細"success"銆�
+     * 飦叾浠栵細璇︾粏鎻忚堪銆�
+     * */
+    private String msg;
+    /**
+     *杩斿洖鐨勫搷搴旀暟鎹粨鏋勩��
+     * */
+    private Map<String, Object> data;
+}
diff --git a/rsf-server/src/main/java/asnOrder.sql b/rsf-server/src/main/java/asnOrder.sql
index d073bf2..18cbb48 100644
--- a/rsf-server/src/main/java/asnOrder.sql
+++ b/rsf-server/src/main/java/asnOrder.sql
@@ -23,6 +23,7 @@
     arrTime: "arrTime",
     rleStatus: "rleStatus",
     name: "name",
+    ntyStatus: "ntyStatus",
 },
 
 -- ResourceContent
diff --git a/rsf-server/src/main/java/asnOrderItem.sql b/rsf-server/src/main/java/asnOrderItem.sql
index 7c92e02..87c7135 100644
--- a/rsf-server/src/main/java/asnOrderItem.sql
+++ b/rsf-server/src/main/java/asnOrderItem.sql
@@ -2,10 +2,10 @@
 -- mysql
 insert into `sys_menu` ( `name`, `parent_id`, `route`, `component`, `type`, `sort`, `tenant_id`, `status`) values ( 'menu.asnOrderItem', '0', '/manager/asnOrderItem', 'asnOrderItem', '0' , '0', '1' , '1');
 
-insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Query ASN鍗曟嵁', '', '1', 'manager:asnOrderItem:list', '0', '1', '1');
-insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Create ASN鍗曟嵁', '', '1', 'manager:asnOrderItem:save', '1', '1', '1');
-insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Update ASN鍗曟嵁', '', '1', 'manager:asnOrderItem:update', '2', '1', '1');
-insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Delete ASN鍗曟嵁', '', '1', 'manager:asnOrderItem:remove', '3', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Query ASN鍗曟嵁', '139', '1', 'manager:asnOrderItem:list', '0', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Create ASN鍗曟嵁', '139', '1', 'manager:asnOrderItem:save', '1', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Update ASN鍗曟嵁', '139', '1', 'manager:asnOrderItem:update', '2', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Delete ASN鍗曟嵁', '139', '1', 'manager:asnOrderItem:remove', '3', '1', '1');
 
 -- locale menu name
 asnOrderItem: 'AsnOrderItem',
@@ -28,6 +28,7 @@
     qrcode: "qrcode",
     barcode: "barcode",
     packName: "packName",
+    ntyStatus: "ntyStatus",
 },
 
 -- ResourceContent
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/config/RemotesInfoProperties.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/config/RemotesInfoProperties.java
new file mode 100644
index 0000000..b8fae24
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/config/RemotesInfoProperties.java
@@ -0,0 +1,46 @@
+package com.vincent.rsf.server.api.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author Ryan
+ * @version 1.0
+ * @title RemotesInfoProperties
+ * @description
+ * @create 2025/3/7 09:48
+ */
+@Data
+@Configuration
+@ConfigurationProperties(prefix = "platform.erp")
+public class RemotesInfoProperties {
+
+    /**
+     * 鎺ュ彛host
+     */
+    private String host;
+    /**
+     * 绔彛鍙�
+     */
+    private String port;
+
+    /**
+     * 鎺ュ彛閾炬帴鍓嶇紑
+     */
+    private String prePath;
+
+    @Data
+    @Configuration
+    @ConfigurationProperties(prefix = "platform.erp.api")
+    public class ApiInfo {
+        /**
+         * 涓�閿笂鎶ヨ川妫�鎺ュ彛
+         */
+        private String notifyInspect;
+    }
+
+    public String getBaseUrl() {
+        return  this.host + ":" + this.port + "/" + this.prePath;
+    }
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/config/RestTemplateConfig.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/config/RestTemplateConfig.java
new file mode 100644
index 0000000..5a7dc87
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/config/RestTemplateConfig.java
@@ -0,0 +1,22 @@
+package com.vincent.rsf.server.api.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.client.RestTemplate;
+
+/**
+ * @author Ryan
+ * @version 1.0
+ * @title RestTemplateConfig
+ * @description
+ * @create 2025/3/7 10:01
+ */
+
+@Configuration
+public class RestTemplateConfig {
+
+    @Bean
+    public RestTemplate getInstant() {
+        return  new RestTemplate();
+    }
+}
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
new file mode 100644
index 0000000..01aa9f7
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/PoItemsDto.java
@@ -0,0 +1,43 @@
+package com.vincent.rsf.server.api.entity.dto;
+
+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 PoItemsDto
+ * @description
+ * @create 2025/3/7 08:49
+ */
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "PoItemsDto", description = "PO鍗曟嵁")
+public class PoItemsDto implements Serializable {
+
+    @ApiModelProperty("PO鍗曟槑缁嗘爣璇�")
+    private String id;
+
+    @ApiModelProperty("PO涓诲崟鏍囪瘑")
+    private String purchaseId;
+
+    @ApiModelProperty("Erp鏄庣粏鍗曟爣璇�")
+    private String erpItemId;
+
+    @ApiModelProperty("鐗╂枡缂栫爜")
+    private String matnrCode;
+
+    @ApiModelProperty("鐗╂枡鍚嶇О")
+    private String matnrName;
+
+    @ApiModelProperty("璁¢噺鍗曚綅")
+    private String unit;
+
+    @ApiModelProperty("鏁伴噺")
+    private String anfme;
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ErpInspectItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ErpInspectItem.java
new file mode 100644
index 0000000..080da32
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ErpInspectItem.java
@@ -0,0 +1,38 @@
+package com.vincent.rsf.server.api.entity.params;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * @author Ryan
+ * @version 1.0
+ * @title ErpInspectItem
+ * @description
+ * @create 2025/3/7 09:35
+ */
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "ErpInspectItem", description = "Erp璐ㄦ鍗曟嵁鏄庣粏")
+public class ErpInspectItem {
+
+    /**
+     * erp鏄庣粏缂栫爜
+     */
+    public String poItemId;
+
+    /**
+     * 鐗╂枡缂栫爜
+     */
+    public String matnrCode;
+
+    /**
+     * 璁¢噺鍗曚綅
+     */
+    public String unit;
+
+    /**
+     * 鏁伴噺
+     */
+    public Double anfme;
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ErpInspectParams.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ErpInspectParams.java
new file mode 100644
index 0000000..76badb5
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ErpInspectParams.java
@@ -0,0 +1,36 @@
+package com.vincent.rsf.server.api.entity.params;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author Ryan
+ * @version 1.0
+ * @title ErpInspectParams
+ * @description
+ * @create 2025/3/6 15:08
+ */
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "ErpInspectParams", description = "Erp璐ㄦ鍗曟嵁")
+public class ErpInspectParams implements Serializable {
+
+    /**
+     * 涓诲崟鏍囪瘑
+     */
+    public String poId;
+    /**
+     * 涓诲崟缂栫爜
+     */
+    private String poCode;
+    /**
+     * 璐ㄦ鏄庣粏
+     */
+    private List<ErpInspectItem> children;
+
+}
+
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 a241420..266c842 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
@@ -2,6 +2,7 @@
 
 
 import com.vincent.rsf.server.api.controller.params.Order;
+import com.vincent.rsf.server.api.entity.dto.PoItemsDto;
 
 import java.util.List;
 
@@ -15,4 +16,6 @@
 public interface ErpApiService {
 
     boolean syncPurchasee(List<Order> orders);
+
+    boolean reportInspectNotify(List<PoItemsDto> items);
 }
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 b60f6e1..6ba6412 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
@@ -1,10 +1,21 @@
 package com.vincent.rsf.server.api.service.impl;
 
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.vincent.rsf.common.domain.CommonReponse;
 import com.vincent.rsf.framework.exception.CoolException;
-import com.vincent.rsf.server.api.controller.params.OrderItem;
+import com.vincent.rsf.server.api.config.RemotesInfoProperties;
+import com.vincent.rsf.server.api.entity.dto.PoItemsDto;
 import com.vincent.rsf.server.api.entity.enums.OrderType;
+import com.vincent.rsf.server.api.entity.params.ErpInspectItem;
+import com.vincent.rsf.server.api.entity.params.ErpInspectParams;
+import com.vincent.rsf.server.manager.entity.AsnOrder;
+import com.vincent.rsf.server.manager.entity.AsnOrderItem;
 import com.vincent.rsf.server.manager.entity.PurchaseItem;
+import com.vincent.rsf.server.manager.service.AsnOrderItemService;
+import com.vincent.rsf.server.manager.service.AsnOrderService;
 import com.vincent.rsf.server.manager.service.PurchaseItemService;
 import com.vincent.rsf.server.manager.service.PurchaseService;
 import com.vincent.rsf.server.system.constant.SerialRuleCode;
@@ -12,13 +23,21 @@
 import com.vincent.rsf.server.system.utils.SerialRuleUtils;
 import com.vincent.rsf.server.api.service.ErpApiService;
 import com.vincent.rsf.server.manager.entity.Purchase;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @author Ryan
@@ -27,14 +46,26 @@
  * @description
  * @create 2025/3/4 16:27
  */
-@Service
-public class ErpApiServiceImpl extends ServiceImpl implements ErpApiService {
+@Slf4j
+@Service("erpApiService")
+public class ErpApiServiceImpl implements ErpApiService {
 
     @Autowired
     private PurchaseService purchaseService;
-
     @Autowired
     private PurchaseItemService purchaseItemService;
+
+    @Autowired
+    private AsnOrderService asnOrderService;
+
+    @Autowired
+    private AsnOrderItemService asnOrderItemService;
+    @Autowired
+    private RestTemplate restTemplate;
+    @Autowired
+    private RemotesInfoProperties remotesInfoProperties;
+    @Autowired
+    private RemotesInfoProperties.ApiInfo apiInfo;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -69,4 +100,106 @@
         return true;
     }
 
+    /**
+     * @author Ryan
+     * @description 涓婃姤璐ㄦ鍒楄〃
+     * @params [items 鍒楄〃]
+     * @return boolean
+     * @time 2025/3/7 09:12
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean reportInspectNotify(List<PoItemsDto> items) {
+        if (items.isEmpty()) {
+            throw new CoolException("涓婃姤鍐呭涓虹┖锛侊紒");
+        }
+        List<ErpInspectParams> inspectParams =  new ArrayList<>();
+        Map<String, List<PoItemsDto>> listMap = items.stream().collect(Collectors.groupingBy(PoItemsDto::getPurchaseId));
+        listMap.keySet().forEach(key -> {
+            Purchase purchase = purchaseService.getOne(new LambdaQueryWrapper<Purchase>().eq(Purchase::getId, Long.valueOf(key)));
+            if (Objects.isNull(purchase)) {
+                throw new CoolException("閲囪喘鍗曚俊鎭湁璇紒锛�");
+            }
+            ErpInspectParams params = new ErpInspectParams();
+            List<ErpInspectItem> inspectItems = new ArrayList<>();
+            //璧嬪�糴rp涓诲崟缂栫爜,缂栧彿
+            params.setPoId(purchase.getErpId())
+                    .setPoCode(purchase.getErpCode());
+            List<PoItemsDto> dtos = listMap.get(key);
+            if (dtos.isEmpty()) {
+                throw new CoolException("鍗曟嵁淇℃伅閿欒锛侊紒");
+            }
+            dtos.forEach(dto -> {
+                ErpInspectItem inspect= new ErpInspectItem();
+                BeanUtils.copyProperties(dto, inspect);
+                //璧嬪�糴rp鏄庣粏缂栫爜
+                inspect.setPoItemId(dto.getErpItemId());
+                inspectItems.add(inspect);
+            });
+            params.setChildren(inspectItems);
+            inspectParams.add(params);
+
+        });
+
+        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
+        //鑾峰彇涓婃姤璐ㄦ鎺ュ彛
+        String url = remotesInfoProperties.getBaseUrl() + apiInfo.getNotifyInspect();
+        // 璁剧疆璇锋眰鍙傛暟
+        params.add("params", JSONObject.toJSONString(inspectParams));
+        log.info("璇锋眰鍦板潃锛歿}锛岃姹傚弬鏁帮細{}", url, JSONObject.toJSONString(inspectParams));
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("Content-Type", "application/json");
+        HttpEntity httpEntity = new HttpEntity<>(params, headers);
+        // 璇锋眰
+        ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
+        log.info("涓嬪彂浠诲姟 杩斿洖缁撴灉锛歿}", exchange);
+        if (Objects.isNull(exchange.getBody()) || exchange.getBody() == null) {
+            throw new CoolException("涓嬪彂浠诲姟澶辫触锛侊紒");
+        } else {
+            CommonReponse reponse = (CommonReponse) JSON.parse(exchange.getBody());
+            if (reponse.getCode() == 0) {
+                //淇敼asn涓婃姤鐘舵��
+                Set<String> itemSets = items.stream().map(PoItemsDto::getId).collect(Collectors.toSet());
+                Set<Long> longSet = new HashSet<>();
+                itemSets.forEach(set -> {
+                    longSet.add(Long.parseLong(set));
+                });
+
+                List<AsnOrderItem> asnOrderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().in(AsnOrderItem::getPoDetlId, longSet));
+                if (asnOrderItems.isEmpty()) {
+                    throw new CoolException("ASN鍗曟嵁涓嶅瓨鍦紒锛�");
+                }
+                List<Long> list = asnOrderItems.stream().map(AsnOrderItem::getId).collect(Collectors.toList());
+
+                /**************************     淇敼ASN鏄庣粏鍗曠姸鎬�         ******************************/
+
+
+                if (!asnOrderItemService.update(new LambdaUpdateWrapper<AsnOrderItem>().in(AsnOrderItem::getId, list).set(AsnOrderItem::getStatus, 1))) {
+                    throw new CoolException("ASN鏄庣粏鍗曟嵁鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                }
+
+                /**************************     淇敼ASN涓诲崟鏁版嵁         ******************************/
+                //鑾峰彇ASN鏄庣粏璁㈠崟鏍囪瘑
+                List<Long> ids = asnOrderItems.stream().map(AsnOrderItem::getAsnId).collect(Collectors.toList());
+                //ASN鏄庣粏鍗曟嵁鍒嗙粍
+                Map<Long, List<AsnOrderItem>> asnIds = asnOrderItems.stream().collect(Collectors.groupingBy(AsnOrderItem::getAsnId));
+                ids.forEach(id -> {
+                    int count = asnOrderService.count(new LambdaQueryWrapper<AsnOrder>().in(AsnOrder::getId, id));
+                    if (count == asnIds.get(id).size()) {
+                        if (!asnOrderService.update(new LambdaUpdateWrapper<AsnOrder>().eq(AsnOrder::getId, id).set(AsnOrder::getStatus, 1))) {
+                            throw new CoolException("ASN涓诲崟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                        }
+                    } else {
+                        if (!asnOrderService.update(new LambdaUpdateWrapper<AsnOrder>().eq(AsnOrder::getId, id).set(AsnOrder::getStatus, 2))) {
+                            throw new CoolException("ASN涓诲崟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+                        }
+                    }
+                });
+                return true;
+            } else {
+                throw new CoolException(reponse.getMsg());
+            }
+        }
+    }
+
 }
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 f118786..68d4754 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_asn_order_item";
-        generator.tableDesc="ASN鍗曟嵁";
+        generator.table="man_purchase_item";
+        generator.tableDesc="閲囪喘鏄庣粏鍗�";
         generator.packagePath="com.vincent.rsf.server.manager";
 
         generator.build();
@@ -31,7 +31,7 @@
 /*
  CREATE TABLE `man_tablename` (
  `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',
- `uuid` VARCHAR(255) DEFAULT NULL COMMENT '缂栧彿',
+ `code` VARCHAR(255) DEFAULT NULL COMMENT '缂栧彿',
  `name` VARCHAR(255) DEFAULT NULL COMMENT '鍚嶇О(*)',
  `status` INT(1) NOT NULL DEFAULT '1' COMMENT '鐘舵�亄1:姝e父,0:鍐荤粨}',
  `deleted` INT(1) NOT NULL DEFAULT '0' COMMENT '鏄惁鍒犻櫎{1:鏄�,0:鍚',
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/config/SysStockProperties.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/config/SysStockProperties.java
new file mode 100644
index 0000000..306fc3c
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/config/SysStockProperties.java
@@ -0,0 +1,48 @@
+package com.vincent.rsf.server.common.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author Ryan
+ * @version 1.0
+ * @title SysStockFlowProperties
+ * @description
+ * @create 2025/3/5 17:02
+ */
+@Data
+@Configuration
+@ConfigurationProperties(prefix = "stock")
+public class SysStockProperties {
+
+
+    /**
+     * wms鏄惁鍏佽鎵撳嵃璐х墿鏍囩, 榛樿鍙墦鍗�
+     */
+    private Boolean flagPrinter;
+
+    /**
+     * 鏄惁鑷姩鐢熸垚ASN鍗曪紙榛樿锛氭槸锛夛紝涓恒�庡惁銆忓垯寮�鍚疨O鍗曟墜鍔ㄧ敓鎴怉SN鍗曞姛鑳�
+     */
+    private Boolean flagAutoAsn;
+
+
+
+    @Data
+    @Configuration
+    @ConfigurationProperties(prefix = "stock.inspect")
+    public class InspectProperties {
+        /**
+         * 鏄惁寮�鍚笂鏋舵牎楠�
+         */
+        private Boolean flagAvailable;
+
+        /**
+         * 鏄惁寮�鍚敹璐ф牎楠岋紝 涓婃灦鏍¢獙鍜屾敹璐ф牎楠岋紝鍙細寮�鍚竴涓�
+         */
+        private Boolean flagReceiving;
+
+    }
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java
index e088b8a..6144741 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java
@@ -12,6 +12,7 @@
 import com.vincent.rsf.server.manager.entity.AsnOrder;
 import com.vincent.rsf.server.manager.service.AsnOrderService;
 import com.vincent.rsf.server.system.controller.BaseController;
+import io.swagger.annotations.Api;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
@@ -20,6 +21,7 @@
 import java.util.*;
 
 @RestController
+@Api(tags = "ASN鍏ュ簱閫氱煡鍗�")
 public class AsnOrderController extends BaseController {
 
     @Autowired
@@ -107,6 +109,23 @@
         ExcelUtil.build(ExcelUtil.create(asnOrderService.list(), AsnOrder.class), response);
     }
 
+    /**
+     * 璐ㄦ涓婃姤
+     * @param orders
+     * @return
+     */
+    @PostMapping("/asnOrder/inspect")
+    @PreAuthorize("hasAuthority('manager:asnOrder:list')")
+    public R notifyInspect(@RequestBody List<AsnOrder> orders) {
+        if (orders.isEmpty()) {
+            return R.error("涓婃姤鍗曟嵁涓嶈兘涓虹┖!!");
+        }
+        if (asnOrderService.notifyInspect(orders)) {
+            return R.ok("璐ㄦ涓婃姤鎴愬姛锛侊紒");
+        } else {
+            return R.error("涓�閿笂鎶ュけ璐ワ紒锛�");
+        }
+    }
 
 
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrder.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrder.java
index e07af37..f9fa8da 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrder.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrder.java
@@ -95,6 +95,12 @@
     private Date arrTime;
 
     /**
+     * 璐ㄦ涓婃姤鐘舵��
+     */
+    @ApiModelProperty("涓婃姤鐘舵�� 0锛氭湭涓婃姤, 1锛氬凡涓婃姤")
+    private Integer ntyStatus;
+
+    /**
      * 閲婃斁鐘舵�� 0:  姝e父   1:  宸查噴鏀�  
      */
     @ApiModelProperty(value= "閲婃斁鐘舵�� 0:  姝e父   1:  宸查噴鏀�  ")
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Purchase.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Purchase.java
index b59e788..3de8476 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Purchase.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Purchase.java
@@ -55,11 +55,15 @@
     @ApiModelProperty(value= "鍗曟嵁绫诲瀷")
     private String type;
 
+
+    @ApiModelProperty(value = "erp涓诲崟鏍囪瘑")
+    private String erpId;
+
     /**
      * 鍗曟嵁鏉ユ簮
      */
     @ApiModelProperty(value= "鍗曟嵁鏉ユ簮")
-    private String from;
+    private String source;
 
     /**
      * 棰勮鍒拌揪鏃堕棿
@@ -171,10 +175,11 @@
 
     public Purchase() {}
 
-    public Purchase(String code,String type,String from,Date preArr,Double anfme,Double qty,Double workQty,String channel,String erpCode,Date startTime,Date endTime,String project,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
+    public Purchase(String code,String type,String source,String erpId ,Date preArr,Double anfme,Double qty,Double workQty,String channel,String erpCode,Date startTime,Date endTime,String project,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
         this.code = code;
         this.type = type;
-        this.from = from;
+        this.source = source;
+        this.erpId = erpId;
         this.preArr = preArr;
         this.anfme = anfme;
         this.qty = qty;
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 a9c82a5..0ae2108 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 erpId;
+    private String erpItemId;
 
     /**
      * 鐗╂枡缂栫爜
@@ -168,9 +168,9 @@
 
     public PurchaseItem() {}
 
-    public PurchaseItem(Long purchaseId,String erpId,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) {
+    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.erpId = erpId;
+        this.erpItemId = erpItemId;
         this.matnrCode = matnrCode;
         this.matnrName = matnrName;
         this.unit = unit;
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/PurchaseMapper.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/PurchaseMapper.java
index 7a4c6ef..535e9d7 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/PurchaseMapper.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/PurchaseMapper.java
@@ -1,12 +1,18 @@
 package com.vincent.rsf.server.manager.mapper;
 
+import com.vincent.rsf.server.api.entity.dto.PoItemsDto;
 import com.vincent.rsf.server.manager.entity.Purchase;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Set;
 
 @Mapper
 @Repository
 public interface PurchaseMapper extends BaseMapper<Purchase> {
 
+    List<PoItemsDto> poList(@Param("ids") Set<Long> ids);
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/ScheduleJobs.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
similarity index 86%
rename from rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/ScheduleJobs.java
rename to rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
index aceb1c9..e811c81 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/ScheduleJobs.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
@@ -1,15 +1,19 @@
-package com.vincent.rsf.server.manager.utils;
+package com.vincent.rsf.server.manager.schedules;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.server.common.config.SysStockProperties;
 import com.vincent.rsf.server.common.utils.DateUtils;
 import com.vincent.rsf.server.manager.entity.*;
 import com.vincent.rsf.server.manager.service.*;
+import com.vincent.rsf.server.system.constant.SerialRuleCode;
+import com.vincent.rsf.server.system.utils.SerialRuleUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -38,6 +42,9 @@
 
     @Autowired
     private AsnOrderItemService asnOrderItemService;
+
+    @Resource
+    private SysStockProperties flowProperties;
     /**
      * @author Ryan
      * @description  鏍规嵁PO鍗曟嵁鐢熸垚ASN鍗�,鑷姩鐢熸垚ASN鍗曚负鍏ㄩ噺鐢熸垚
@@ -48,6 +55,10 @@
     @Scheduled(cron = "0 0/30 * * * ?  ")
     @Transactional(rollbackFor = Exception.class)
     public void genAsnOrder() {
+        //鍒ゆ柇鏄惁寮�鍚嚜鍔ㄧ敓鎴怉SN鍗曟嵁
+        if (!flowProperties.getFlagAutoAsn()) {
+            return;
+        }
         //鑾峰彇鏈敓鎴怉SN鍗曟嵁
         List<Purchase> purchases = purchaseService.list(new LambdaQueryWrapper<Purchase>().eq(Purchase::getStatus, 0));
         //閲囪喘鍗曚负绌猴紝鐩存帴璺冲嚭褰撳墠浠诲姟
@@ -67,7 +78,10 @@
                 throw new CoolException("瀛愬垪琛ㄦ暟鎹负绌猴紝璇锋煡璇O鍗曟槸鍚︽纭綍鍏ワ紒锛�");
             }
             AsnOrder order = new AsnOrder();
+            //鏍规嵁缂栫爜瑙勫垯鐢熸垚ASN鍗曞彿
+            String code = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_ASN_ORDER, purchase);
             order.setAnfme(purchase.getAnfme())
+                    .setCode(code)
                     .setArrTime(purchase.getPreArr())
                     .setQty(purchase.getQty())
                     .setPoId(purchase.getId())
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderService.java
index 54b0fe9..3415d00 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderService.java
@@ -3,6 +3,9 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.vincent.rsf.server.manager.entity.AsnOrder;
 
+import java.util.List;
+
 public interface AsnOrderService extends IService<AsnOrder> {
 
+    boolean notifyInspect(List<AsnOrder> orders);
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
index 8906fbf..61f0632 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
@@ -1,12 +1,58 @@
 package com.vincent.rsf.server.manager.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.server.api.entity.dto.PoItemsDto;
+import com.vincent.rsf.server.api.service.ErpApiService;
+import com.vincent.rsf.server.manager.entity.AsnOrderItem;
+import com.vincent.rsf.server.manager.entity.Purchase;
+import com.vincent.rsf.server.manager.entity.PurchaseItem;
+import com.vincent.rsf.server.manager.mapper.AsnOrderItemMapper;
 import com.vincent.rsf.server.manager.mapper.AsnOrderMapper;
 import com.vincent.rsf.server.manager.entity.AsnOrder;
+import com.vincent.rsf.server.manager.mapper.PurchaseMapper;
 import com.vincent.rsf.server.manager.service.AsnOrderService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * @author Ryan
+ * @description
+ * @throws
+ * @return
+ * @time 2025/3/7 08:02
+ */
 @Service("asnOrderService")
 public class AsnOrderServiceImpl extends ServiceImpl<AsnOrderMapper, AsnOrder> implements AsnOrderService {
 
+    @Autowired
+    private ErpApiService erpApiService;
+    @Resource
+    private PurchaseMapper purchaseMapper;
+
+    @Resource
+    private AsnOrderItemMapper asnOrderItemMapper;
+
+    @Override
+    public boolean notifyInspect(List<AsnOrder> orders) {
+        if (orders.isEmpty()) {
+            throw new CoolException("涓婃姤鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        Set<Long> asnIds = orders.stream().map(AsnOrder::getId).collect(Collectors.toSet());
+        if (asnIds.isEmpty()) {
+            throw new CoolException("ASN鍗曟嵁涓嶈兘涓虹┖锛侊紒");
+        }
+        List<PoItemsDto> items = purchaseMapper.poList(asnIds);
+        if (erpApiService.reportInspectNotify(items)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java
index bc92ad9..6fdeb55 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java
@@ -9,5 +9,13 @@
  */
 public class SerialRuleCode {
 
+    /**
+     * 绯荤粺PO鍗曞悓姝ョ紪鐮佽鍒�
+     */
     public final static String PURCHASE_CODE = "sys_purchase_code";
+
+    /**
+     * ASN閫氱煡鍗曠敓鎴愮紪鐮佽鍒�
+     */
+    public final static String SYS_ASN_ORDER = "sys_ans_order";
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/utils/SerialRuleUtils.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/utils/SerialRuleUtils.java
index c026c72..02a3c1b 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/utils/SerialRuleUtils.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/utils/SerialRuleUtils.java
@@ -41,7 +41,7 @@
                 .getOne(new LambdaQueryWrapper<SerialRule>()
                         .eq(SerialRule::getCode, code));
         if (Objects.isNull(serialRule)) {
-            throw new CoolException("閲囪喘缂栫爜瑙勫垯涓嶅瓨鍦紒锛�");
+            throw new CoolException("褰撳墠涓氬姟锛�" + code + "锛岀紪鐮佽鍒欎笉瀛樺湪锛侊紒");
         }
         SerialRuleItemService serialRuleItemService = SpringUtils.getBean(SerialRuleItemService.class);
 
diff --git a/rsf-server/src/main/java/purchase.sql b/rsf-server/src/main/java/purchase.sql
index 6b17750..976bf84 100644
--- a/rsf-server/src/main/java/purchase.sql
+++ b/rsf-server/src/main/java/purchase.sql
@@ -2,10 +2,10 @@
 -- mysql
 insert into `sys_menu` ( `name`, `parent_id`, `route`, `component`, `type`, `sort`, `tenant_id`, `status`) values ( 'menu.purchase', '0', '/manager/purchase', 'purchase', '0' , '0', '1' , '1');
 
-insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Query ERP閲囪喘鍗�', '', '1', 'manager:purchase:list', '0', '1', '1');
-insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Create ERP閲囪喘鍗�', '', '1', 'manager:purchase:save', '1', '1', '1');
-insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Update ERP閲囪喘鍗�', '', '1', 'manager:purchase:update', '2', '1', '1');
-insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Delete ERP閲囪喘鍗�', '', '1', 'manager:purchase:remove', '3', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Query 閲囪喘鍗�', '148', '1', 'manager:purchase:list', '0', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Create 閲囪喘鍗�', '148', '1', 'manager:purchase:save', '1', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Update 閲囪喘鍗�', '148', '1', 'manager:purchase:update', '2', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Delete 閲囪喘鍗�', '148', '1', 'manager:purchase:remove', '3', '1', '1');
 
 -- locale menu name
 purchase: 'Purchase',
@@ -13,17 +13,19 @@
 -- locale field
 purchase: {
     code: "code",
+    erpId: "erpId",
     type: "type",
-    from: "from",
+    wkType: "wkType",
+    source: "source",
     preArr: "preArr",
     anfme: "anfme",
     qty: "qty",
     workQty: "workQty",
     channel: "channel",
     erpCode: "erpCode",
+    project: "project",
     startTime: "startTime",
     endTime: "endTime",
-    project: "project",
 },
 
 -- ResourceContent
diff --git a/rsf-server/src/main/java/purchaseItem.sql b/rsf-server/src/main/java/purchaseItem.sql
index 25a5cc5..acb3d51 100644
--- a/rsf-server/src/main/java/purchaseItem.sql
+++ b/rsf-server/src/main/java/purchaseItem.sql
@@ -2,10 +2,10 @@
 -- mysql
 insert into `sys_menu` ( `name`, `parent_id`, `route`, `component`, `type`, `sort`, `tenant_id`, `status`) values ( 'menu.purchaseItem', '0', '/manager/purchaseItem', 'purchaseItem', '0' , '0', '1' , '1');
 
-insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Query ERP閲囪喘鍗�', '', '1', 'manager:purchaseItem:list', '0', '1', '1');
-insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Create ERP閲囪喘鍗�', '', '1', 'manager:purchaseItem:save', '1', '1', '1');
-insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Update ERP閲囪喘鍗�', '', '1', 'manager:purchaseItem:update', '2', '1', '1');
-insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Delete ERP閲囪喘鍗�', '', '1', 'manager:purchaseItem:remove', '3', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Query 閲囪喘鏄庣粏鍗�', '153', '1', 'manager:purchaseItem:list', '0', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Create 閲囪喘鏄庣粏鍗�', '153', '1', 'manager:purchaseItem:save', '1', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Update 閲囪喘鏄庣粏鍗�', '153', '1', 'manager:purchaseItem:update', '2', '1', '1');
+insert into `sys_menu` ( `name`, `parent_id`, `type`, `authority`, `sort`, `tenant_id`, `status`) values ( 'Delete 閲囪喘鏄庣粏鍗�', '153', '1', 'manager:purchaseItem:remove', '3', '1', '1');
 
 -- locale menu name
 purchaseItem: 'PurchaseItem',
@@ -13,18 +13,18 @@
 -- locale field
 purchaseItem: {
     purchaseId: "purchaseId",
-    erpId: "erpId",
+    erpItemId: "erpItemId",
     matnrCode: "matnrCode",
     matnrName: "matnrName",
     unit: "unit",
     anfme: "anfme",
     qty: "qty",
-    nomQty: "nomQty",
+    nromQty: "nromQty",
     asnQty: "asnQty",
     printQty: "printQty",
-    pulrName: "pulrName",
-    pulrCode: "pulrCode",
-    pulrBatch: "pulrBatch",
+    splrName: "splrName",
+    splrCode: "splrCode",
+    splrBatch: "splrBatch",
 },
 
 -- ResourceContent
diff --git a/rsf-server/src/main/resources/application-dev.yml b/rsf-server/src/main/resources/application-dev.yml
index f63202c..98555cf 100644
--- a/rsf-server/src/main/resources/application-dev.yml
+++ b/rsf-server/src/main/resources/application-dev.yml
@@ -65,4 +65,32 @@
   password: xltys1995
   port: 6379
   timeout: 5000
-  index: 15
\ No newline at end of file
+  index: 15
+
+#骞冲彴鎺ュ彛淇℃伅閰嶇疆(濡傦細ERP, QMS, WCS绛�)
+platform:
+  #浼佷笟ERP骞冲彴
+  erp:
+    #localhost
+    host: http://127.0.0.1
+    #绔彛鍙�
+    port: 8080
+    #鎺ュ搧閾炬帴鍓嶇紑
+    prePath: rsf-server
+    #鎺ュ彛鏄庣粏
+    api:
+      #璐ㄦ涓婃姤鎺ュ彛
+      notifyInspect: /report/inspect
+
+#浠撳簱鍔熻兘鍙傛暟閰嶇疆
+stock:
+  #鏄惁鍏佽鎵撳嵃璐х墿鏍囩锛� 榛樿鍏佽鎵撳嵃锛屼篃鍙敱渚涘簲鍟嗘彁渚涙爣绛�
+  flagPrinter: false
+  #鏄惁鑷姩鐢熸垚ASN鍗曪紙榛樿锛氭槸锛夛紝涓恒�庡惁銆忓垯寮�鍚疨O鍗曟墜鍔ㄧ敓鎴怉SN鍗曞姛鑳�
+  flagAutoAsn: true
+  #璐ㄦ鍔熻兘 鏄惁鏍¢獙涓婃灦锛堥粯璁わ細鏄級锛屾槸鍚︽牎楠屾敹璐э紙榛樿锛氬惁锛�
+  inspect:
+    #鍒ゆ柇鏄悗妫�楠屽悎鏍煎悗锛屾墠鍏佽涓婃灦
+    flagAvailable: true
+    #鍒ゆ柇鏄惁鏍¢獙鍚堟牸鍚庯紝鎵嶅厑璁告敹璐�
+    flagReceiving: false
\ No newline at end of file
diff --git a/rsf-server/src/main/resources/application-prod.yml b/rsf-server/src/main/resources/application-prod.yml
index ecc2fc2..1c91565 100644
--- a/rsf-server/src/main/resources/application-prod.yml
+++ b/rsf-server/src/main/resources/application-prod.yml
@@ -62,4 +62,7 @@
   password: xltys1995
   port: 6379
   timeout: 5000
-  index: 11
\ No newline at end of file
+  index: 11
+
+stock:
+  flagAvailable: true
diff --git a/rsf-server/src/main/resources/mapper/manager/PurchaseMapper.xml b/rsf-server/src/main/resources/mapper/manager/PurchaseMapper.xml
index b1c92ce..60ab306 100644
--- a/rsf-server/src/main/resources/mapper/manager/PurchaseMapper.xml
+++ b/rsf-server/src/main/resources/mapper/manager/PurchaseMapper.xml
@@ -2,4 +2,27 @@
 <!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.PurchaseMapper">
 
+    <select id="poList" resultType="com.vincent.rsf.server.api.entity.dto.PoItemsDto">
+        SELECT
+            id,
+            purchase_id,
+            erp_item_id,
+            matnr_code,
+            matnr_name,
+            unit,
+            anfme
+        FROM
+            man_purchase_item mpi
+        WHERE
+            id IN ( SELECT po_detl_id FROM man_asn_order_item
+            <where>
+                1 = 1
+                <if test="ids != null and ids.size() > 0">
+                    <foreach collection="ids" index="index" item="item" separator="," open="AND asn_id IN (" close=")">
+                        #{item}
+                    </foreach>
+                </if>
+            </where>
+        )
+    </select>
 </mapper>

--
Gitblit v1.9.1