From 578639bf4bb9be9808d7c482345b8c35b02510b7 Mon Sep 17 00:00:00 2001
From: cuilei <ray_tsu1@163.com>
Date: 星期一, 18 八月 2025 17:02:13 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/main/java/org/jeecg/modules/wms/request/ReceiveMESScanItemList.java                  |   37 
 src/main/java/org/jeecg/modules/wms/request/WebServiceSendItem.java                      |  121 +
 src/main/java/org/jeecg/modules/wms/service/WebServiceSoap.java                          |   63 
 src/main/java/org/jeecg/modules/feishu/service/FeishuUserService.java                    |  635 ++++++++
 src/main/java/org/jeecg/modules/wms/dto/DeliOrderDeleteResponse.java                     |   44 
 src/main/java/org/jeecg/modules/andon/entity/AndonButtonConfig.java                      |   15 
 src/main/java/org/jeecg/modules/andon/controller/AndonButtonConfigController.java        |  311 ++-
 src/main/java/org/jeecg/modules/andon/entity/AndonOrder.java                             |    3 
 src/main/java/org/jeecg/modules/wms/WMSObjectFactory.java                                |  132 +
 src/main/java/org/jeecg/modules/wms/request/ArrayOfWebServiceSendItem.java               |   69 
 src/main/resources/application-dev.yml                                                   |    4 
 src/main/java/org/jeecg/modules/andon/service/IAndonButtonConfigService.java             |   34 
 src/main/java/org/jeecg/modules/wms/MESObjectFactory.java                                |   51 
 src/main/java/org/jeecg/modules/andon/service/impl/AndonOrderServiceImpl.java            |   75 +
 src/main/java/org/jeecg/modules/wms/request/ReceiveWMSScanItemList.java                  |   21 
 src/main/java/org/jeecg/modules/mes/entity/MessageResponse.java                          |   12 
 src/main/java/org/jeecg/modules/wms/service/MESWebServiceSoap.java                       |   28 
 src/main/java/org/jeecg/modules/andon/entity/AndonResponseConfig.java                    |    3 
 src/main/java/org/jeecg/modules/andon/dto/AndonButtonDTO.java                            |   83 +
 src/main/java/org/jeecg/modules/andon/mapper/xml/AndonButtonConfigMapper.xml             |  200 ++
 src/main/java/org/jeecg/modules/wms/request/HelloWorld.java                              |   32 
 src/main/java/org/jeecg/modules/wms/config/WebServiceServerConfig.java                   |   15 
 src/main/java/org/jeecg/modules/wms/request/WebReservationOrder.java                     |   51 
 src/main/java/org/jeecg/modules/andon/service/impl/AndonButtonConfigServiceImpl.java     |   26 
 src/main/java/org/jeecg/modules/cms/mapper/xml/CuttingToolMapper.xml                     |    1 
 src/main/resources/wsdl/WebService.asmx.wsdl                                             |  227 +++
 src/main/java/org/jeecg/modules/andon/service/impl/AndonResponseConfigServiceImpl.java   |  197 ++
 src/main/java/org/jeecg/modules/wms/WMSWebService.java                                   |  114 +
 src/main/java/org/jeecg/modules/andon/service/IAndonResponseConfigService.java           |   13 
 pom.xml                                                                                  |   26 
 src/main/java/org/jeecg/modules/wms/service/impl/MESWebServiceSoapImpl.java              |   37 
 src/main/java/org/jeecg/modules/wms/dto/ReceiveReservationResponse.java                  |   40 
 src/main/java/org/jeecg/modules/andon/mapper/AndonButtonConfigMapper.java                |   35 
 src/main/java/org/jeecg/modules/andon/mapper/xml/AndonResponseConfigMapper.xml           |   12 
 src/main/java/org/jeecg/modules/wms/controller/WMSTestController.java                    |   56 
 src/main/java/org/jeecg/modules/wms/request/DeliOrderDelete.java                         |   45 
 src/main/java/org/jeecg/modules/feishu/job/FeishuSyncTask.java                           |    5 
 src/main/java/org/jeecg/modules/wms/dto/ReceiveMESScanItemListResponse.java              |   41 
 src/main/java/org/jeecg/modules/andon/mapper/AndonResponseConfigMapper.java              |    4 
 src/main/java/org/jeecg/modules/wms/request/ReceiveReservation.java                      |   42 
 db/双林新火炬MES数据库设计.pdma.json                                                               |  558 ++-----
 src/main/java/org/jeecg/modules/wms/dto/HelloWorldResponse.java                          |   44 
 src/main/java/org/jeecg/modules/andon/controller/AndonResponseConfigController.java      |  269 ++-
 src/main/java/org/jeecg/modules/mes/entity/MesMaterialTransferRequest.java               |   32 
 src/main/java/org/jeecg/modules/andon/service/IAndonOrderService.java                    |   17 
 src/main/java/org/jeecg/modules/wms/dto/ReceiveWMSScanItemListResponse.java              |   18 
 /dev/null                                                                                |   22 
 src/main/java/org/jeecg/modules/mes/controller/MesMaterialTransferRequestController.java |    2 
 src/main/java/org/jeecg/modules/wms/dto/WSResponse.java                                  |   35 
 src/main/java/org/jeecg/modules/andon/controller/AndonOrderController.java               |  280 ++-
 src/main/java/org/jeecg/modules/wms/request/WMSWebServiceSendItem.java                   |   91 +
 51 files changed, 3,403 insertions(+), 925 deletions(-)

diff --git "a/db/\345\217\214\346\236\227\346\226\260\347\201\253\347\202\254MES\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.pdma.json" "b/db/\345\217\214\346\236\227\346\226\260\347\201\253\347\202\254MES\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.pdma.json"
index 1431e02..9295952 100644
--- "a/db/\345\217\214\346\236\227\346\226\260\347\201\253\347\202\254MES\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.pdma.json"
+++ "b/db/\345\217\214\346\236\227\346\226\260\347\201\253\347\202\254MES\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.pdma.json"
@@ -2,7 +2,7 @@
   "name": "鍙屾灄鏂扮伀鐐琈ES鏁版嵁搴撹璁�",
   "describe": "鎻忚堪鍙岃柂鏂扮伀鐐琈ES鏁版嵁搴撹璁¤鎯�",
   "avatar": "",
-  "version": "4.9.4",
+  "version": "4.9.2",
   "createdTime": "2025-3-10 16:38:19",
   "updatedTime": "2025-8-18 15:02:20",
   "dbConns": [],
@@ -632,7 +632,7 @@
       "#DDE5FF"
     ],
     "DDLToggleCase": "L",
-    "menuWidth": "296px"
+    "menuWidth": "364px"
   },
   "entities": [
     {
@@ -64779,6 +64779,24 @@
           "id": "FC8D8EFD-EDAD-42FD-81CA-B2B3962BD05F"
         },
         {
+          "defKey": "publish_time",
+          "defName": "鍙戝竷鏃堕棿",
+          "comment": "",
+          "type": "",
+          "len": "",
+          "scale": "",
+          "primaryKey": false,
+          "notNull": false,
+          "autoIncrement": false,
+          "defaultValue": "",
+          "hideInGraph": false,
+          "refDict": "",
+          "baseType": "89D69E81-EA34-42EE-9FA2-93B8BD27E098",
+          "extProps": {},
+          "domain": "7CFFA0D3-6A93-4DDC-BC10-DF21211064DC",
+          "id": "7BC5A8E6-31E0-4B70-BAC5-87EFF639FE63"
+        },
+        {
           "defKey": "request_status",
           "defName": "璇锋眰鐘舵��",
           "comment": "",
@@ -64789,7 +64807,7 @@
           "notNull": false,
           "autoIncrement": false,
           "defaultValue": "",
-          "hideInGraph": false,
+          "hideInGraph": true,
           "refDict": "",
           "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64",
           "extProps": {},
@@ -64816,7 +64834,7 @@
         },
         {
           "defKey": "original_warehouse_id",
-          "defName": "鍘熷簱瀛樺湴",
+          "defName": "璧峰搴撳瓨鍦�",
           "comment": "",
           "type": "",
           "len": "",
@@ -64905,6 +64923,146 @@
           "extProps": {},
           "domain": "7CFFA0D3-6A93-4DDC-BC10-DF21211064DC",
           "id": "F0CEC477-F5FE-4622-83DB-FBFDA4344E30"
+        },
+        {
+          "defKey": "material_number",
+          "defName": "鐗╂枡缂栫爜",
+          "comment": "",
+          "type": "",
+          "len": "",
+          "scale": "",
+          "primaryKey": false,
+          "notNull": false,
+          "autoIncrement": false,
+          "defaultValue": "",
+          "hideInGraph": false,
+          "domain": "BE09D493-E183-402D-ACC4-EEA21EB35B8E",
+          "refDict": "",
+          "extProps": {},
+          "notes": {},
+          "attr1": "",
+          "attr2": "",
+          "attr3": "",
+          "attr4": "",
+          "attr5": "",
+          "attr6": "",
+          "attr7": "",
+          "attr8": "",
+          "attr9": "",
+          "id": "0B5A2CD6-7472-4E18-ACB1-6418C2A8A109",
+          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64"
+        },
+        {
+          "defKey": "material_name",
+          "defName": "鐗╂枡鍚嶇О",
+          "comment": "",
+          "type": "",
+          "len": "",
+          "scale": "",
+          "primaryKey": false,
+          "notNull": false,
+          "autoIncrement": false,
+          "defaultValue": "",
+          "hideInGraph": true,
+          "domain": "9092C4E0-1A54-4859-ABBB-5B62DBC27573",
+          "refDict": "",
+          "extProps": {},
+          "notes": {},
+          "attr1": "",
+          "attr2": "",
+          "attr3": "",
+          "attr4": "",
+          "attr5": "",
+          "attr6": "",
+          "attr7": "",
+          "attr8": "",
+          "attr9": "",
+          "id": "AFBDF9D2-3B49-4620-9541-C15731785905",
+          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64"
+        },
+        {
+          "defKey": "specified_quantity",
+          "defName": "鐞嗚鎷夊姩鏁伴噺",
+          "comment": "",
+          "type": "",
+          "len": "",
+          "scale": "",
+          "primaryKey": false,
+          "notNull": false,
+          "autoIncrement": false,
+          "defaultValue": "",
+          "hideInGraph": false,
+          "domain": "FF4459C5-6B45-4DBF-8FC0-E06239BC05B4",
+          "refDict": "",
+          "extProps": {},
+          "notes": {},
+          "attr1": "",
+          "attr2": "",
+          "attr3": "",
+          "attr4": "",
+          "attr5": "",
+          "attr6": "",
+          "attr7": "",
+          "attr8": "",
+          "attr9": "",
+          "id": "60A2C50B-3F37-4319-B53A-72AE3E55CAFC",
+          "baseType": "1A0BDC09-0792-4174-9E8E-80BE8DF44B8E"
+        },
+        {
+          "defKey": "actual_quantity",
+          "defName": "瀹為檯鎷夊姩鏁伴噺",
+          "comment": "",
+          "type": "",
+          "len": "",
+          "scale": "",
+          "primaryKey": false,
+          "notNull": false,
+          "autoIncrement": false,
+          "defaultValue": "",
+          "hideInGraph": false,
+          "domain": "FF4459C5-6B45-4DBF-8FC0-E06239BC05B4",
+          "refDict": "",
+          "extProps": {},
+          "notes": {},
+          "attr1": "",
+          "attr2": "",
+          "attr3": "",
+          "attr4": "",
+          "attr5": "",
+          "attr6": "",
+          "attr7": "",
+          "attr8": "",
+          "attr9": "",
+          "id": "AE123111-CDE3-4CFE-96ED-EFA3D3115CD2",
+          "baseType": "1A0BDC09-0792-4174-9E8E-80BE8DF44B8E"
+        },
+        {
+          "defKey": "remaining_quantity",
+          "defName": "杞﹂棿鍓╀綑鏁伴噺",
+          "comment": "",
+          "type": "",
+          "len": "",
+          "scale": "",
+          "primaryKey": false,
+          "notNull": false,
+          "autoIncrement": false,
+          "defaultValue": "",
+          "hideInGraph": false,
+          "domain": "FF4459C5-6B45-4DBF-8FC0-E06239BC05B4",
+          "refDict": "",
+          "extProps": {},
+          "notes": {},
+          "attr1": "",
+          "attr2": "",
+          "attr3": "",
+          "attr4": "",
+          "attr5": "",
+          "attr6": "",
+          "attr7": "",
+          "attr8": "",
+          "attr9": "",
+          "id": "12249855-7F62-4734-B5B8-1AACBE2A50CC",
+          "baseType": "1A0BDC09-0792-4174-9E8E-80BE8DF44B8E"
         }
       ],
       "correlations": [],
@@ -65743,397 +65901,6 @@
           "attr9": "",
           "id": "4B21EDEF-B9C4-48C7-BF6A-AC5ABA159B8A",
           "baseType": "1A0BDC09-0792-4174-9E8E-80BE8DF44B8E"
-        }
-      ],
-      "correlations": [],
-      "indexes": [],
-      "type": "P"
-    },
-    {
-      "id": "2FF92658-07FE-49BC-A690-E24FA5226BB3",
-      "env": {
-        "base": {
-          "nameSpace": "",
-          "codeRoot": ""
-        }
-      },
-      "defKey": "mes_material_transfer_detail",
-      "defName": "鐗╂枡鎷夊姩鏄庣粏",
-      "comment": "",
-      "properties": {
-        "partitioned by": "(date string)",
-        "row format delimited": "",
-        "fields terminated by ','": "",
-        "collection items terminated by '-'": "",
-        "map keys terminated by ':'": "",
-        "store as textfile;": ""
-      },
-      "sysProps": {
-        "nameTemplate": "{defKey}[{defName}]"
-      },
-      "notes": {},
-      "headers": [
-        {
-          "refKey": "hideInGraph",
-          "hideInGraph": true
-        },
-        {
-          "refKey": "defKey",
-          "freeze": false,
-          "hideInGraph": false
-        },
-        {
-          "refKey": "defName",
-          "freeze": false,
-          "hideInGraph": false
-        },
-        {
-          "refKey": "primaryKey",
-          "freeze": false,
-          "hideInGraph": false
-        },
-        {
-          "refKey": "notNull",
-          "freeze": false,
-          "hideInGraph": true
-        },
-        {
-          "refKey": "autoIncrement",
-          "freeze": false,
-          "hideInGraph": true
-        },
-        {
-          "refKey": "domain",
-          "freeze": false,
-          "hideInGraph": true
-        },
-        {
-          "refKey": "type",
-          "freeze": false,
-          "hideInGraph": false
-        },
-        {
-          "refKey": "len",
-          "freeze": false,
-          "hideInGraph": false
-        },
-        {
-          "refKey": "scale",
-          "freeze": false,
-          "hideInGraph": false
-        },
-        {
-          "refKey": "comment",
-          "freeze": false,
-          "hideInGraph": true
-        },
-        {
-          "refKey": "refDict",
-          "freeze": false,
-          "hideInGraph": true
-        },
-        {
-          "refKey": "defaultValue",
-          "freeze": false,
-          "hideInGraph": true
-        },
-        {
-          "refKey": "isStandard",
-          "freeze": false,
-          "hideInGraph": false
-        },
-        {
-          "refKey": "uiHint",
-          "freeze": false,
-          "hideInGraph": true
-        },
-        {
-          "refKey": "extProps",
-          "freeze": false,
-          "hideInGraph": true
-        },
-        {
-          "refKey": "attr1",
-          "freeze": false,
-          "hideInGraph": true
-        },
-        {
-          "refKey": "attr2",
-          "freeze": false,
-          "hideInGraph": true
-        },
-        {
-          "refKey": "attr3",
-          "freeze": false,
-          "hideInGraph": true
-        },
-        {
-          "refKey": "attr4",
-          "freeze": false,
-          "hideInGraph": true
-        },
-        {
-          "refKey": "attr5",
-          "freeze": false,
-          "hideInGraph": true
-        },
-        {
-          "refKey": "attr6",
-          "freeze": false,
-          "hideInGraph": true
-        },
-        {
-          "refKey": "attr7",
-          "freeze": false,
-          "hideInGraph": true
-        },
-        {
-          "refKey": "attr8",
-          "freeze": false,
-          "hideInGraph": true
-        },
-        {
-          "refKey": "attr9",
-          "freeze": false,
-          "hideInGraph": true
-        }
-      ],
-      "fields": [
-        {
-          "defKey": "id",
-          "defName": "涓婚敭",
-          "comment": "",
-          "type": "",
-          "len": "",
-          "scale": "",
-          "primaryKey": true,
-          "notNull": true,
-          "autoIncrement": false,
-          "defaultValue": "",
-          "hideInGraph": false,
-          "refDict": "",
-          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64",
-          "extProps": {},
-          "domain": "16120F75-6AA7-4483-868D-F07F511BB081",
-          "id": "F7E0BFAE-F178-43E0-8482-2DCE7CEFB184"
-        },
-        {
-          "defKey": "create_by",
-          "defName": "鍒涘缓浜�",
-          "comment": "",
-          "domain": "54611CCC-CA4B-42E1-9F32-4944C85B85A6",
-          "type": "",
-          "len": "",
-          "scale": "",
-          "primaryKey": false,
-          "notNull": false,
-          "autoIncrement": false,
-          "defaultValue": "",
-          "hideInGraph": true,
-          "refDict": "",
-          "uiHint": "",
-          "id": "F445F433-E877-4D2A-8ECE-03043F0ACB7D",
-          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64"
-        },
-        {
-          "defKey": "create_time",
-          "defName": "鍒涘缓鏃堕棿",
-          "comment": "",
-          "domain": "7CFFA0D3-6A93-4DDC-BC10-DF21211064DC",
-          "type": "",
-          "len": "",
-          "scale": "",
-          "primaryKey": false,
-          "notNull": false,
-          "autoIncrement": false,
-          "defaultValue": "",
-          "hideInGraph": true,
-          "refDict": "",
-          "uiHint": "",
-          "id": "E690295E-8BFF-49DA-8966-6A3FE3824883",
-          "baseType": "89D69E81-EA34-42EE-9FA2-93B8BD27E098"
-        },
-        {
-          "defKey": "update_by",
-          "defName": "鏇存柊浜�",
-          "comment": "",
-          "domain": "54611CCC-CA4B-42E1-9F32-4944C85B85A6",
-          "type": "",
-          "len": "",
-          "scale": "",
-          "primaryKey": false,
-          "notNull": false,
-          "autoIncrement": false,
-          "defaultValue": "",
-          "hideInGraph": true,
-          "refDict": "",
-          "uiHint": "",
-          "id": "E3C7E33A-8B8C-4F70-BA59-3B5A10C50734",
-          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64"
-        },
-        {
-          "defKey": "update_time",
-          "defName": "鏇存柊鏃堕棿",
-          "comment": "",
-          "domain": "7CFFA0D3-6A93-4DDC-BC10-DF21211064DC",
-          "type": "",
-          "len": "",
-          "scale": "",
-          "primaryKey": false,
-          "notNull": false,
-          "autoIncrement": false,
-          "defaultValue": "",
-          "hideInGraph": true,
-          "refDict": "",
-          "uiHint": "",
-          "id": "93258189-F627-4142-BC39-0295E3A52033",
-          "baseType": "89D69E81-EA34-42EE-9FA2-93B8BD27E098"
-        },
-        {
-          "defKey": "del_flag",
-          "defName": "鍒犻櫎鏍囪",
-          "comment": "",
-          "type": "",
-          "len": "",
-          "scale": "",
-          "primaryKey": false,
-          "notNull": false,
-          "autoIncrement": false,
-          "defaultValue": "",
-          "hideInGraph": false,
-          "refDict": "",
-          "baseType": "1D764C4A-6F9F-421E-B11A-6F3E23B51811",
-          "extProps": {},
-          "domain": "6BC8F04B-6CFA-4995-98D3-318F5CDD774E",
-          "id": "F80D66E7-8670-4B1C-9940-041DBAD0580A"
-        },
-        {
-          "defKey": "request_id",
-          "defName": "鐢宠鍗旾D",
-          "comment": "",
-          "type": "",
-          "len": "",
-          "scale": "",
-          "primaryKey": false,
-          "notNull": false,
-          "autoIncrement": false,
-          "defaultValue": "",
-          "hideInGraph": false,
-          "refDict": "",
-          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64",
-          "extProps": {},
-          "domain": "16120F75-6AA7-4483-868D-F07F511BB081",
-          "id": "850A2C7A-D321-4283-B735-7BCC56DF7933"
-        },
-        {
-          "defKey": "material_number",
-          "defName": "鐗╂枡缂栫爜",
-          "comment": "",
-          "type": "",
-          "len": "",
-          "scale": "",
-          "primaryKey": false,
-          "notNull": false,
-          "autoIncrement": false,
-          "defaultValue": "",
-          "hideInGraph": false,
-          "domain": "BE09D493-E183-402D-ACC4-EEA21EB35B8E",
-          "refDict": "",
-          "extProps": {},
-          "notes": {},
-          "attr1": "",
-          "attr2": "",
-          "attr3": "",
-          "attr4": "",
-          "attr5": "",
-          "attr6": "",
-          "attr7": "",
-          "attr8": "",
-          "attr9": "",
-          "id": "E77D6EFA-7408-4891-888B-D6FC2CF8E6E5",
-          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64"
-        },
-        {
-          "defKey": "material_name",
-          "defName": "鐗╂枡鍚嶇О",
-          "comment": "",
-          "type": "",
-          "len": "",
-          "scale": "",
-          "primaryKey": false,
-          "notNull": false,
-          "autoIncrement": false,
-          "defaultValue": "",
-          "hideInGraph": true,
-          "domain": "9092C4E0-1A54-4859-ABBB-5B62DBC27573",
-          "refDict": "",
-          "extProps": {},
-          "notes": {},
-          "attr1": "",
-          "attr2": "",
-          "attr3": "",
-          "attr4": "",
-          "attr5": "",
-          "attr6": "",
-          "attr7": "",
-          "attr8": "",
-          "attr9": "",
-          "id": "270E5417-96C7-4540-AC29-07C8FCC3CD38",
-          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64"
-        },
-        {
-          "defKey": "specified_quantity",
-          "defName": "鐞嗚鎷夊姩鏁伴噺",
-          "comment": "",
-          "type": "",
-          "len": "",
-          "scale": "",
-          "primaryKey": false,
-          "notNull": false,
-          "autoIncrement": false,
-          "defaultValue": "",
-          "hideInGraph": false,
-          "refDict": "",
-          "baseType": "1A0BDC09-0792-4174-9E8E-80BE8DF44B8E",
-          "extProps": {},
-          "domain": "FF4459C5-6B45-4DBF-8FC0-E06239BC05B4",
-          "id": "D7028092-5311-4FC1-B6F2-19B1FFBFA85B"
-        },
-        {
-          "defKey": "actual_quantity",
-          "defName": "瀹為檯鎷夊姩鏁伴噺",
-          "comment": "",
-          "type": "",
-          "len": "",
-          "scale": "",
-          "primaryKey": false,
-          "notNull": false,
-          "autoIncrement": false,
-          "defaultValue": "",
-          "hideInGraph": false,
-          "refDict": "",
-          "baseType": "1A0BDC09-0792-4174-9E8E-80BE8DF44B8E",
-          "extProps": {},
-          "domain": "FF4459C5-6B45-4DBF-8FC0-E06239BC05B4",
-          "id": "4E9708B3-14B0-45A0-A3B8-351D759C7B47"
-        },
-        {
-          "defKey": "remaining_quantity",
-          "defName": "杞﹂棿鍓╀綑鏁伴噺",
-          "comment": "",
-          "type": "",
-          "len": "",
-          "scale": "",
-          "primaryKey": false,
-          "notNull": false,
-          "autoIncrement": false,
-          "defaultValue": "",
-          "hideInGraph": false,
-          "refDict": "",
-          "baseType": "1A0BDC09-0792-4174-9E8E-80BE8DF44B8E",
-          "extProps": {},
-          "domain": "FF4459C5-6B45-4DBF-8FC0-E06239BC05B4",
-          "id": "FE041E9A-5D05-42EE-AA33-C563B66B99A5"
         }
       ],
       "correlations": [],
@@ -70054,7 +69821,6 @@
         "70FEB6D0-FC18-42C5-8608-34E8BBB4A406",
         "D16FD5E0-8B16-4C0E-AD67-6E5C2FED1A65",
         "5835D3E9-4B10-48DC-B116-584E447AA201",
-        "2FF92658-07FE-49BC-A690-E24FA5226BB3",
         "23C6B8F0-0010-4453-B3C2-9305746C37AB",
         "D3263A0C-1D6A-453A-B933-86651B5566FE"
       ],
diff --git a/pom.xml b/pom.xml
index 7c25535..060cc41 100644
--- a/pom.xml
+++ b/pom.xml
@@ -582,6 +582,32 @@
                     </nonFilteredFileExtensions>
                 </configuration>
             </plugin>
+            <!-- CXF Codegen Plugin锛氭牴鎹� WSDL 鐢熸垚 Java 瀹㈡埛绔唬鐮� -->
+            <plugin>
+                <groupId>org.apache.cxf</groupId>
+                <artifactId>cxf-codegen-plugin</artifactId>
+                <version>3.5.5</version> <!-- 浣犲彲浠ヤ娇鐢ㄦ渶鏂扮殑绋冲畾鐗堟湰锛屾瘮濡� 3.5.6 / 4.x -->
+                <executions>
+                    <execution>
+                        <id>generate-sources</id>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>wsdl2java</goal>
+                        </goals>
+                        <configuration>
+                            <!-- 鎸囧畾鐢熸垚鐨� Java 绫� 鏀惧湪鍝釜鐩綍涓嬶紙閫氬父鏄� target/generated-sources/cxf锛� -->
+                            <sourceRoot>${project.basedir}/target/generated-sources/cxf</sourceRoot>
+                            <wsdlOptions>
+                                <wsdlOption>
+                                    <wsdl>${basedir}/src/main/resources/wsdl/WebService.asmx.wsdl</wsdl>
+                                    <!-- 鎴栬�呯洿鎺ヤ娇鐢� WSDL 鐨勭綉缁滃湴鍧� -->
+                                    <!-- <wsdl>http://10.101.0.182:8002/MesWebService/WebService.asmx?wsdl</wsdl> -->
+                                </wsdlOption>
+                            </wsdlOptions>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
         </plugins>
         <resources>
             <resource>
diff --git a/src/main/java/org/jeecg/modules/andon/controller/AndonButtonConfigController.java b/src/main/java/org/jeecg/modules/andon/controller/AndonButtonConfigController.java
index a589c4b..f1b74a5 100644
--- a/src/main/java/org/jeecg/modules/andon/controller/AndonButtonConfigController.java
+++ b/src/main/java/org/jeecg/modules/andon/controller/AndonButtonConfigController.java
@@ -6,14 +6,14 @@
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.system.base.controller.JeecgController;
 import org.jeecg.common.system.query.QueryGenerator;
-import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.andon.dto.AndonButtonDTO;
 import org.jeecg.modules.andon.entity.AndonButtonConfig;
 import org.jeecg.modules.andon.service.IAndonButtonConfigService;
+import org.jeecg.modules.andon.service.impl.AndonOrderServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.ModelAndView;
@@ -21,47 +21,26 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.util.Arrays;
+import java.util.List;
 
 /**
-* @Description: 瀹夌伅鎸夐挳閰嶇疆
-* @Author: jeecg-boot
-* @Date:   2025-07-10
-* @Version: V1.0
-*/
-@Api(tags="瀹夌伅鎸夐挳閰嶇疆")
+ * @Description: 瀹夌伅鎸夐挳閰嶇疆
+ * @Author: jeecg-boot
+ * @Date: 2025-07-10
+ * @Version: V1.0
+ */
+@Api(tags = "瀹夌伅鎸夐挳閰嶇疆")
 @RestController
 @RequestMapping("/andonbuttonconfig/andonButtonConfig")
 @Slf4j
 public class AndonButtonConfigController extends JeecgController<AndonButtonConfig, IAndonButtonConfigService> {
-   @Autowired
-   private IAndonButtonConfigService andonButtonConfigService;
-
-   /**
-    * 鍒嗛〉鍒楄〃鏌ヨ
-    *
-    * @param andonButtonConfig
-    * @param pageNo
-    * @param pageSize
-    * @param req
-    * @return
-    */
-   //@AutoLog(value = "瀹夌伅鎸夐挳閰嶇疆-鍒嗛〉鍒楄〃鏌ヨ")
-   @ApiOperation(value="瀹夌伅鎸夐挳閰嶇疆-鍒嗛〉鍒楄〃鏌ヨ", notes="瀹夌伅鎸夐挳閰嶇疆-鍒嗛〉鍒楄〃鏌ヨ")
-   @GetMapping(value = "/list")
-   public Result<IPage<AndonButtonConfig>> queryPageList(AndonButtonConfig andonButtonConfig,
-                                  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
-                                  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
-                                  HttpServletRequest req) {
-       QueryWrapper<AndonButtonConfig> queryWrapper = QueryGenerator.initQueryWrapper(andonButtonConfig, req.getParameterMap());
-       Page<AndonButtonConfig> page = new Page<AndonButtonConfig>(pageNo, pageSize);
-       IPage<AndonButtonConfig> pageList = andonButtonConfigService.page(page, queryWrapper);
-       return Result.OK(pageList);
-   }
-
-
+    @Autowired
+    private IAndonButtonConfigService andonButtonConfigService;
+    @Autowired
+    private AndonOrderServiceImpl andonOrderServiceImpl;
 
     /**
-     * APP鍒嗛〉鍒楄〃鏌ヨ
+     * 鍒嗛〉鍒楄〃鏌ヨ
      *
      * @param andonButtonConfig
      * @param pageNo
@@ -69,126 +48,172 @@
      * @param req
      * @return
      */
-    @ApiOperation(value="瀹夌伅鎸夐挳閰嶇疆-鍒嗛〉鍒楄〃鏌ヨ", notes="瀹夌伅鎸夐挳閰嶇疆-鍒嗛〉鍒楄〃鏌ヨ")
-    @GetMapping(value = "/App/list")
-    public Result<IPage<AndonButtonConfig>> queryPageAppList(AndonButtonConfig andonButtonConfig,
-                                                             @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
-                                                             @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
-                                                             HttpServletRequest req) {
+    //@AutoLog(value = "瀹夌伅鎸夐挳閰嶇疆-鍒嗛〉鍒楄〃鏌ヨ")
+    @ApiOperation(value = "瀹夌伅鎸夐挳閰嶇疆-鍒嗛〉鍒楄〃鏌ヨ", notes = "瀹夌伅鎸夐挳閰嶇疆-鍒嗛〉鍒楄〃鏌ヨ")
+    @GetMapping(value = "/list")
+    public Result<IPage<AndonButtonConfig>> queryPageList(AndonButtonConfig andonButtonConfig,
+                                                          @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                          @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                          HttpServletRequest req) {
         QueryWrapper<AndonButtonConfig> queryWrapper = QueryGenerator.initQueryWrapper(andonButtonConfig, req.getParameterMap());
-
-        // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛
-        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        if (sysUser != null) {
-            // 澧炲姞閫氳繃绯荤粺鐧诲綍浜鸿繘琛岃繃婊�
-            queryWrapper.eq("create_by", sysUser.getUsername());
-        }
-
         Page<AndonButtonConfig> page = new Page<AndonButtonConfig>(pageNo, pageSize);
         IPage<AndonButtonConfig> pageList = andonButtonConfigService.page(page, queryWrapper);
         return Result.OK(pageList);
     }
 
-   /**
-    *   娣诲姞
-    *
-    * @param andonButtonConfig
-    * @return
-    */
-   @AutoLog(value = "瀹夌伅鎸夐挳閰嶇疆-娣诲姞")
-   @ApiOperation(value="瀹夌伅鎸夐挳閰嶇疆-娣诲姞", notes="瀹夌伅鎸夐挳閰嶇疆-娣诲姞")
-   //@RequiresPermissions("org.jeecg.modules:andon_button_config:add")
-   @PostMapping(value = "/add")
-   public Result<String> add(@RequestBody AndonButtonConfig andonButtonConfig) {
-       andonButtonConfigService.save(andonButtonConfig);
-       return Result.OK("娣诲姞鎴愬姛锛�");
-   }
 
-   /**
-    *  缂栬緫
-    *
-    * @param andonButtonConfig
-    * @return
-    */
-   @AutoLog(value = "瀹夌伅鎸夐挳閰嶇疆-缂栬緫")
-   @ApiOperation(value="瀹夌伅鎸夐挳閰嶇疆-缂栬緫", notes="瀹夌伅鎸夐挳閰嶇疆-缂栬緫")
-   //@RequiresPermissions("org.jeecg.modules:andon_button_config:edit")
-   @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
-   public Result<String> edit(@RequestBody AndonButtonConfig andonButtonConfig) {
-       andonButtonConfigService.updateById(andonButtonConfig);
-       return Result.OK("缂栬緫鎴愬姛!");
-   }
+    /**
+     * APP瀹夌伅鎸夐挳鍒楄〃鏌ヨ
+     *
+     * @param factoryId
+     * @return
+     */
+    @ApiOperation(value = "瀹夌伅鎸夐挳閰嶇疆-鍒嗛〉鍒楄〃鏌ヨ", notes = "瀹夌伅鎸夐挳閰嶇疆-鍒嗛〉鍒楄〃鏌ヨ")
+    @GetMapping(value = "/queryUserAndonButtonList")
+    public Result<List<AndonButtonDTO>> queryUserAndonButtonList(@RequestParam("factoryId") String factoryId) {
+        List<AndonButtonDTO> list = andonButtonConfigService.queryUserAndonButtonList(factoryId);
+        return Result.OK(list);
+    }
 
-   /**
-    *   閫氳繃id鍒犻櫎
-    *
-    * @param id
-    * @return
-    */
-   @AutoLog(value = "瀹夌伅鎸夐挳閰嶇疆-閫氳繃id鍒犻櫎")
-   @ApiOperation(value="瀹夌伅鎸夐挳閰嶇疆-閫氳繃id鍒犻櫎", notes="瀹夌伅鎸夐挳閰嶇疆-閫氳繃id鍒犻櫎")
-   //@RequiresPermissions("org.jeecg.modules:andon_button_config:delete")
-   @DeleteMapping(value = "/delete")
-   public Result<String> delete(@RequestParam(name="id",required=true) String id) {
-       andonButtonConfigService.removeById(id);
-       return Result.OK("鍒犻櫎鎴愬姛!");
-   }
 
-   /**
-    *  鎵归噺鍒犻櫎
-    *
-    * @param ids
-    * @return
-    */
-   @AutoLog(value = "瀹夌伅鎸夐挳閰嶇疆-鎵归噺鍒犻櫎")
-   @ApiOperation(value="瀹夌伅鎸夐挳閰嶇疆-鎵归噺鍒犻櫎", notes="瀹夌伅鎸夐挳閰嶇疆-鎵归噺鍒犻櫎")
-   //@RequiresPermissions("org.jeecg.modules:andon_button_config:deleteBatch")
-   @DeleteMapping(value = "/deleteBatch")
-   public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
-       this.andonButtonConfigService.removeByIds(Arrays.asList(ids.split(",")));
-       return Result.OK("鎵归噺鍒犻櫎鎴愬姛!");
-   }
+    /**
+     * APP瀹夌伅鍙戣捣鍒楄〃鏌ヨ
+     *
+     * @param factoryId
+     * @return
+     */
+    @ApiOperation(value = "瀹夌伅鍙戣捣-鍒嗛〉鍒楄〃鏌ヨ", notes = "瀹夌伅鍙戣捣-鍒嗛〉鍒楄〃鏌ヨ")
+    @GetMapping(value = "/queryUserAndonCallList")
+    public Result<List<AndonButtonDTO>> queryUserAndonCallList(@RequestParam("factoryId") String factoryId) {
+        List<AndonButtonDTO> list = andonButtonConfigService.queryUserAndonCallList(factoryId);
+        return Result.OK(list);
+    }
 
-   /**
-    * 閫氳繃id鏌ヨ
-    *
-    * @param id
-    * @return
-    */
-   //@AutoLog(value = "瀹夌伅鎸夐挳閰嶇疆-閫氳繃id鏌ヨ")
-   @ApiOperation(value="瀹夌伅鎸夐挳閰嶇疆-閫氳繃id鏌ヨ", notes="瀹夌伅鎸夐挳閰嶇疆-閫氳繃id鏌ヨ")
-   @GetMapping(value = "/queryById")
-   public Result<AndonButtonConfig> queryById(@RequestParam(name="id",required=true) String id) {
-       AndonButtonConfig andonButtonConfig = andonButtonConfigService.getById(id);
-       if(andonButtonConfig==null) {
-           return Result.error("鏈壘鍒板搴旀暟鎹�");
-       }
-       return Result.OK(andonButtonConfig);
-   }
+    /**
+     * APP瀹夌伅鍝嶅簲鍒楄〃鏌ヨ
+     *
+     * @param factoryId
+     * @return
+     */
+    @ApiOperation(value = "瀹夌伅鍝嶅簲-鍒嗛〉鍒楄〃鏌ヨ", notes = "瀹夌伅鍝嶅簲-鍒嗛〉鍒楄〃鏌ヨ")
+    @GetMapping(value = "/queryUserAndonRespondList")
+    public Result<List<AndonButtonDTO>> queryUserAndonRespondList(@RequestParam("factoryId") String factoryId) {
+        List<AndonButtonDTO> list = andonButtonConfigService.queryUserAndonRespondList(factoryId);
+        return Result.OK(list);
+    }
 
-   /**
-   * 瀵煎嚭excel
-   *
-   * @param request
-   * @param andonButtonConfig
-   */
-   //@RequiresPermissions("org.jeecg.modules:andon_button_config:exportXls")
-   @RequestMapping(value = "/exportXls")
-   public ModelAndView exportXls(HttpServletRequest request, AndonButtonConfig andonButtonConfig) {
-       return super.exportXls(request, andonButtonConfig, AndonButtonConfig.class, "瀹夌伅鎸夐挳閰嶇疆");
-   }
+    /**
+     * APP瀹夌伅宸插鐞嗗垪琛ㄦ煡璇�
+     *
+     * @param factoryId
+     * @return
+     */
+    @ApiOperation(value = "瀹夌伅鍝嶅簲-鍒嗛〉鍒楄〃鏌ヨ", notes = "瀹夌伅鍝嶅簲-鍒嗛〉鍒楄〃鏌ヨ")
+    @GetMapping(value = "/queryUserAndonHandelList")
+    public Result<List<AndonButtonDTO>> queryUserAndonHandelList(@RequestParam("factoryId") String factoryId) {
+        List<AndonButtonDTO> list = andonButtonConfigService.queryUserAndonHandelList(factoryId);
+        return Result.OK(list);
+    }
+    /**
+     * 娣诲姞
+     *
+     * @param andonButtonConfig
+     * @return
+     */
+    @AutoLog(value = "瀹夌伅鎸夐挳閰嶇疆-娣诲姞")
+    @ApiOperation(value = "瀹夌伅鎸夐挳閰嶇疆-娣诲姞", notes = "瀹夌伅鎸夐挳閰嶇疆-娣诲姞")
+    //@RequiresPermissions("org.jeecg.modules:andon_button_config:add")
+    @PostMapping(value = "/add")
+    public Result<String> add(@RequestBody AndonButtonConfig andonButtonConfig) {
+        andonButtonConfigService.save(andonButtonConfig);
+        return Result.OK("娣诲姞鎴愬姛锛�");
+    }
 
-   /**
+    /**
+     * 缂栬緫
+     *
+     * @param andonButtonConfig
+     * @return
+     */
+    @AutoLog(value = "瀹夌伅鎸夐挳閰嶇疆-缂栬緫")
+    @ApiOperation(value = "瀹夌伅鎸夐挳閰嶇疆-缂栬緫", notes = "瀹夌伅鎸夐挳閰嶇疆-缂栬緫")
+    //@RequiresPermissions("org.jeecg.modules:andon_button_config:edit")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<String> edit(@RequestBody AndonButtonConfig andonButtonConfig) {
+        andonButtonConfigService.updateById(andonButtonConfig);
+        return Result.OK("缂栬緫鎴愬姛!");
+    }
+
+    /**
+     * 閫氳繃id鍒犻櫎
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "瀹夌伅鎸夐挳閰嶇疆-閫氳繃id鍒犻櫎")
+    @ApiOperation(value = "瀹夌伅鎸夐挳閰嶇疆-閫氳繃id鍒犻櫎", notes = "瀹夌伅鎸夐挳閰嶇疆-閫氳繃id鍒犻櫎")
+    //@RequiresPermissions("org.jeecg.modules:andon_button_config:delete")
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+        andonButtonConfigService.removeById(id);
+        return Result.OK("鍒犻櫎鎴愬姛!");
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "瀹夌伅鎸夐挳閰嶇疆-鎵归噺鍒犻櫎")
+    @ApiOperation(value = "瀹夌伅鎸夐挳閰嶇疆-鎵归噺鍒犻櫎", notes = "瀹夌伅鎸夐挳閰嶇疆-鎵归噺鍒犻櫎")
+    //@RequiresPermissions("org.jeecg.modules:andon_button_config:deleteBatch")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        this.andonButtonConfigService.removeByIds(Arrays.asList(ids.split(",")));
+        return Result.OK("鎵归噺鍒犻櫎鎴愬姛!");
+    }
+
+    /**
+     * 閫氳繃id鏌ヨ
+     *
+     * @param id
+     * @return
+     */
+    //@AutoLog(value = "瀹夌伅鎸夐挳閰嶇疆-閫氳繃id鏌ヨ")
+    @ApiOperation(value = "瀹夌伅鎸夐挳閰嶇疆-閫氳繃id鏌ヨ", notes = "瀹夌伅鎸夐挳閰嶇疆-閫氳繃id鏌ヨ")
+    @GetMapping(value = "/queryById")
+    public Result<AndonButtonConfig> queryById(@RequestParam(name = "id", required = true) String id) {
+        AndonButtonConfig andonButtonConfig = andonButtonConfigService.getById(id);
+        if (andonButtonConfig == null) {
+            return Result.error("鏈壘鍒板搴旀暟鎹�");
+        }
+        return Result.OK(andonButtonConfig);
+    }
+
+    /**
+     * 瀵煎嚭excel
+     *
+     * @param request
+     * @param andonButtonConfig
+     */
+    //@RequiresPermissions("org.jeecg.modules:andon_button_config:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, AndonButtonConfig andonButtonConfig) {
+        return super.exportXls(request, andonButtonConfig, AndonButtonConfig.class, "瀹夌伅鎸夐挳閰嶇疆");
+    }
+
+    /**
      * 閫氳繃excel瀵煎叆鏁版嵁
-   *
-   * @param request
-   * @param response
-   * @return
-   */
-   //@RequiresPermissions("andon_button_config:importExcel")
-   @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
-   public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
-       return super.importExcel(request, response, AndonButtonConfig.class);
-   }
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    //@RequiresPermissions("andon_button_config:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, AndonButtonConfig.class);
+    }
 
 }
diff --git a/src/main/java/org/jeecg/modules/andon/controller/AndonOrderController.java b/src/main/java/org/jeecg/modules/andon/controller/AndonOrderController.java
index ae59140..9132c9f 100644
--- a/src/main/java/org/jeecg/modules/andon/controller/AndonOrderController.java
+++ b/src/main/java/org/jeecg/modules/andon/controller/AndonOrderController.java
@@ -12,6 +12,8 @@
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.modules.andon.entity.AndonOrder;
 import org.jeecg.modules.andon.service.IAndonOrderService;
+import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.service.ISysUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.ModelAndView;
@@ -21,141 +23,173 @@
 import java.util.Arrays;
 
 /**
-* @Description: 瀹夌伅宸ュ崟
-* @Author: jeecg-boot
-* @Date:   2025-07-10
-* @Version: V1.0
-*/
-@Api(tags="瀹夌伅宸ュ崟")
+ * @Description: 瀹夌伅宸ュ崟
+ * @Author: jeecg-boot
+ * @Date: 2025-07-10
+ * @Version: V1.0
+ */
+@Api(tags = "瀹夌伅宸ュ崟")
 @RestController
 @RequestMapping("/andonorder/andonOrder")
 @Slf4j
 public class AndonOrderController extends JeecgController<AndonOrder, IAndonOrderService> {
-   @Autowired
-   private IAndonOrderService andonOrderService;
+    @Autowired
+    private IAndonOrderService andonOrderService;
 
-   /**
-    * 鍒嗛〉鍒楄〃鏌ヨ
-    *
-    * @param andonOrder
-    * @param pageNo
-    * @param pageSize
-    * @param req
-    * @return
-    */
-   //@AutoLog(value = "瀹夌伅宸ュ崟-鍒嗛〉鍒楄〃鏌ヨ")
-   @ApiOperation(value="瀹夌伅宸ュ崟-鍒嗛〉鍒楄〃鏌ヨ", notes="瀹夌伅宸ュ崟-鍒嗛〉鍒楄〃鏌ヨ")
-   @GetMapping(value = "/list")
-   public Result<IPage<AndonOrder>> queryPageList(AndonOrder andonOrder,
-                                  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
-                                  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
-                                  HttpServletRequest req) {
-       QueryWrapper<AndonOrder> queryWrapper = QueryGenerator.initQueryWrapper(andonOrder, req.getParameterMap());
-       Page<AndonOrder> page = new Page<AndonOrder>(pageNo, pageSize);
-       IPage<AndonOrder> pageList = andonOrderService.page(page, queryWrapper);
-       return Result.OK(pageList);
-   }
 
-   /**
-    *   娣诲姞
-    *
-    * @param andonOrder
-    * @return
-    */
-   @AutoLog(value = "瀹夌伅宸ュ崟-娣诲姞")
-   @ApiOperation(value="瀹夌伅宸ュ崟-娣诲姞", notes="瀹夌伅宸ュ崟-娣诲姞")
-   //@RequiresPermissions("org.jeecg.modules:andon_order:add")
-   @PostMapping(value = "/add")
-   public Result<String> add(@RequestBody AndonOrder andonOrder) {
-       andonOrderService.save(andonOrder);
-       return Result.OK("娣诲姞鎴愬姛锛�");
-   }
 
-   /**
-    *  缂栬緫
-    *
-    * @param andonOrder
-    * @return
-    */
-   @AutoLog(value = "瀹夌伅宸ュ崟-缂栬緫")
-   @ApiOperation(value="瀹夌伅宸ュ崟-缂栬緫", notes="瀹夌伅宸ュ崟-缂栬緫")
-   //@RequiresPermissions("org.jeecg.modules:andon_order:edit")
-   @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
-   public Result<String> edit(@RequestBody AndonOrder andonOrder) {
-       andonOrderService.updateById(andonOrder);
-       return Result.OK("缂栬緫鎴愬姛!");
-   }
+    /**
+     * 鍒嗛〉鍒楄〃鏌ヨ
+     *
+     * @param andonOrder
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    //@AutoLog(value = "瀹夌伅宸ュ崟-鍒嗛〉鍒楄〃鏌ヨ")
+    @ApiOperation(value = "瀹夌伅宸ュ崟-鍒嗛〉鍒楄〃鏌ヨ", notes = "瀹夌伅宸ュ崟-鍒嗛〉鍒楄〃鏌ヨ")
+    @GetMapping(value = "/list")
+    public Result<IPage<AndonOrder>> queryPageList(AndonOrder andonOrder,
+                                                   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                   HttpServletRequest req) {
+        QueryWrapper<AndonOrder> queryWrapper = QueryGenerator.initQueryWrapper(andonOrder, req.getParameterMap());
+        Page<AndonOrder> page = new Page<AndonOrder>(pageNo, pageSize);
+        IPage<AndonOrder> pageList = andonOrderService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
 
-   /**
-    *   閫氳繃id鍒犻櫎
-    *
-    * @param id
-    * @return
-    */
-   @AutoLog(value = "瀹夌伅宸ュ崟-閫氳繃id鍒犻櫎")
-   @ApiOperation(value="瀹夌伅宸ュ崟-閫氳繃id鍒犻櫎", notes="瀹夌伅宸ュ崟-閫氳繃id鍒犻櫎")
-   //@RequiresPermissions("org.jeecg.modules:andon_order:delete")
-   @DeleteMapping(value = "/delete")
-   public Result<String> delete(@RequestParam(name="id",required=true) String id) {
-       andonOrderService.removeById(id);
-       return Result.OK("鍒犻櫎鎴愬姛!");
-   }
 
-   /**
-    *  鎵归噺鍒犻櫎
-    *
-    * @param ids
-    * @return
-    */
-   @AutoLog(value = "瀹夌伅宸ュ崟-鎵归噺鍒犻櫎")
-   @ApiOperation(value="瀹夌伅宸ュ崟-鎵归噺鍒犻櫎", notes="瀹夌伅宸ュ崟-鎵归噺鍒犻櫎")
-   //@RequiresPermissions("org.jeecg.modules:andon_order:deleteBatch")
-   @DeleteMapping(value = "/deleteBatch")
-   public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
-       this.andonOrderService.removeByIds(Arrays.asList(ids.split(",")));
-       return Result.OK("鎵归噺鍒犻櫎鎴愬姛!");
-   }
+    /**
+     * 娣诲姞
+     *
+     * @param andonOrder
+     * @return
+     */
+    @AutoLog(value = "瀹夌伅宸ュ崟-娣诲姞")
+    @ApiOperation(value = "瀹夌伅宸ュ崟-娣诲姞", notes = "瀹夌伅宸ュ崟-娣诲姞")
+    @PostMapping(value = "/add")
+    public Result<String> add(@RequestBody AndonOrder andonOrder) {
+        andonOrderService.save(andonOrder);
+        return Result.OK("娣诲姞鎴愬姛锛�");
+    }
 
-   /**
-    * 閫氳繃id鏌ヨ
-    *
-    * @param id
-    * @return
-    */
-   //@AutoLog(value = "瀹夌伅宸ュ崟-閫氳繃id鏌ヨ")
-   @ApiOperation(value="瀹夌伅宸ュ崟-閫氳繃id鏌ヨ", notes="瀹夌伅宸ュ崟-閫氳繃id鏌ヨ")
-   @GetMapping(value = "/queryById")
-   public Result<AndonOrder> queryById(@RequestParam(name="id",required=true) String id) {
-       AndonOrder andonOrder = andonOrderService.getById(id);
-       if(andonOrder==null) {
-           return Result.error("鏈壘鍒板搴旀暟鎹�");
-       }
-       return Result.OK(andonOrder);
-   }
 
-   /**
-   * 瀵煎嚭excel
-   *
-   * @param request
-   * @param andonOrder
-   */
-   //@RequiresPermissions("org.jeecg.modules:andon_order:exportXls")
-   @RequestMapping(value = "/exportXls")
-   public ModelAndView exportXls(HttpServletRequest request, AndonOrder andonOrder) {
-       return super.exportXls(request, andonOrder, AndonOrder.class, "瀹夌伅宸ュ崟");
-   }
+    /**
+     * APP瀹夌伅鍝嶅簲鎿嶄綔
+     *
+     * @param orderId
+     * @return
+     */
+    @ApiOperation(value = "APP瀹夌伅鍝嶅簲鎿嶄綔", notes = "APP瀹夌伅鍝嶅簲鎿嶄綔")
+    @GetMapping(value = "/AndonRespond")
+    public Result<String> AndonRespond(@RequestParam("orderId") String orderId) {
+        AndonOrder andonOrder = andonOrderService.getById(orderId);
+        andonOrder.setOrderStatus("2");
+        andonOrderService.updateById(andonOrder);
+        return Result.OK("鍝嶅簲鎴愬姛锛�");
+    }
 
-   /**
+
+    /**
+     * APP瀹夌伅澶勭悊鎿嶄綔
+     *
+     *
+     * @return
+     */
+    @ApiOperation(value = "APP瀹夌伅澶勭悊鎿嶄綔", notes = "APP瀹夌伅澶勭悊鎿嶄綔")
+    @PostMapping(value = "/AndonHandel")
+    public Result<String> AndonHandel(@RequestBody AndonOrder andonOrder) {
+        return andonOrderService.handleAndonOrder(andonOrder);
+    }
+
+
+    /**
+     * 缂栬緫
+     *
+     * @param andonOrder
+     * @return
+     */
+    @AutoLog(value = "瀹夌伅宸ュ崟-缂栬緫")
+    @ApiOperation(value = "瀹夌伅宸ュ崟-缂栬緫", notes = "瀹夌伅宸ュ崟-缂栬緫")
+    //@RequiresPermissions("org.jeecg.modules:andon_order:edit")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<String> edit(@RequestBody AndonOrder andonOrder) {
+        andonOrderService.updateById(andonOrder);
+        return Result.OK("缂栬緫鎴愬姛!");
+    }
+
+    /**
+     * 閫氳繃id鍒犻櫎
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "瀹夌伅宸ュ崟-閫氳繃id鍒犻櫎")
+    @ApiOperation(value = "瀹夌伅宸ュ崟-閫氳繃id鍒犻櫎", notes = "瀹夌伅宸ュ崟-閫氳繃id鍒犻櫎")
+    //@RequiresPermissions("org.jeecg.modules:andon_order:delete")
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+        andonOrderService.removeById(id);
+        return Result.OK("鍒犻櫎鎴愬姛!");
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "瀹夌伅宸ュ崟-鎵归噺鍒犻櫎")
+    @ApiOperation(value = "瀹夌伅宸ュ崟-鎵归噺鍒犻櫎", notes = "瀹夌伅宸ュ崟-鎵归噺鍒犻櫎")
+    //@RequiresPermissions("org.jeecg.modules:andon_order:deleteBatch")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        this.andonOrderService.removeByIds(Arrays.asList(ids.split(",")));
+        return Result.OK("鎵归噺鍒犻櫎鎴愬姛!");
+    }
+
+    /**
+     * 閫氳繃id鏌ヨ
+     *
+     * @param id
+     * @return
+     */
+    //@AutoLog(value = "瀹夌伅宸ュ崟-閫氳繃id鏌ヨ")
+    @ApiOperation(value = "瀹夌伅宸ュ崟-閫氳繃id鏌ヨ", notes = "瀹夌伅宸ュ崟-閫氳繃id鏌ヨ")
+    @GetMapping(value = "/queryById")
+    public Result<AndonOrder> queryById(@RequestParam(name = "id", required = true) String id) {
+        AndonOrder andonOrder = andonOrderService.getById(id);
+        if (andonOrder == null) {
+            return Result.error("鏈壘鍒板搴旀暟鎹�");
+        }
+        return Result.OK(andonOrder);
+    }
+
+    /**
+     * 瀵煎嚭excel
+     *
+     * @param request
+     * @param andonOrder
+     */
+    //@RequiresPermissions("org.jeecg.modules:andon_order:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, AndonOrder andonOrder) {
+        return super.exportXls(request, andonOrder, AndonOrder.class, "瀹夌伅宸ュ崟");
+    }
+
+    /**
      * 閫氳繃excel瀵煎叆鏁版嵁
-   *
-   * @param request
-   * @param response
-   * @return
-   */
-   //@RequiresPermissions("andon_order:importExcel")
-   @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
-   public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
-       return super.importExcel(request, response, AndonOrder.class);
-   }
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    //@RequiresPermissions("andon_order:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, AndonOrder.class);
+    }
 
 }
diff --git a/src/main/java/org/jeecg/modules/andon/controller/AndonResponseConfigController.java b/src/main/java/org/jeecg/modules/andon/controller/AndonResponseConfigController.java
index 1798af8..976af22 100644
--- a/src/main/java/org/jeecg/modules/andon/controller/AndonResponseConfigController.java
+++ b/src/main/java/org/jeecg/modules/andon/controller/AndonResponseConfigController.java
@@ -10,6 +10,7 @@
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.system.base.controller.JeecgController;
 import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.andon.dto.AndonButtonDTO;
 import org.jeecg.modules.andon.entity.AndonResponseConfig;
 import org.jeecg.modules.andon.service.IAndonResponseConfigService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -19,143 +20,165 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.util.Arrays;
+import java.util.List;
 
 /**
-* @Description: 瀹夌伅鍝嶅簲閰嶇疆
-* @Author: jeecg-boot
-* @Date:   2025-07-10
-* @Version: V1.0
-*/
-@Api(tags="瀹夌伅鍝嶅簲閰嶇疆")
+ * @Description: 瀹夌伅鍝嶅簲閰嶇疆
+ * @Author: jeecg-boot
+ * @Date: 2025-07-10
+ * @Version: V1.0
+ */
+@Api(tags = "瀹夌伅鍝嶅簲閰嶇疆")
 @RestController
 @RequestMapping("/andonresponseconfig/andonResponseConfig")
 @Slf4j
 public class AndonResponseConfigController extends JeecgController<AndonResponseConfig, IAndonResponseConfigService> {
-   @Autowired
-   private IAndonResponseConfigService andonResponseConfigService;
+    @Autowired
+    private IAndonResponseConfigService andonResponseConfigService;
 
-   /**
-    * 鍒嗛〉鍒楄〃鏌ヨ
-    *
-    * @param andonResponseConfig
-    * @param pageNo
-    * @param pageSize
-    * @param req
-    * @return
-    */
-   //@AutoLog(value = "瀹夌伅鍝嶅簲閰嶇疆-鍒嗛〉鍒楄〃鏌ヨ")
-   @ApiOperation(value="瀹夌伅鍝嶅簲閰嶇疆-鍒嗛〉鍒楄〃鏌ヨ", notes="瀹夌伅鍝嶅簲閰嶇疆-鍒嗛〉鍒楄〃鏌ヨ")
-   @GetMapping(value = "/list")
-   public Result<IPage<AndonResponseConfig>> queryPageList(AndonResponseConfig andonResponseConfig,
-                                  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
-                                  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
-                                  HttpServletRequest req) {
-       QueryWrapper<AndonResponseConfig> queryWrapper = QueryGenerator.initQueryWrapper(andonResponseConfig, req.getParameterMap());
-       Page<AndonResponseConfig> page = new Page<AndonResponseConfig>(pageNo, pageSize);
-       IPage<AndonResponseConfig> pageList = andonResponseConfigService.page(page, queryWrapper);
-       return Result.OK(pageList);
-   }
+    /**
+     * 鍒嗛〉鍒楄〃鏌ヨ
+     *
+     * @param andonResponseConfig
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    //@AutoLog(value = "瀹夌伅鍝嶅簲閰嶇疆-鍒嗛〉鍒楄〃鏌ヨ")
+    @ApiOperation(value = "瀹夌伅鍝嶅簲閰嶇疆-鍒嗛〉鍒楄〃鏌ヨ", notes = "瀹夌伅鍝嶅簲閰嶇疆-鍒嗛〉鍒楄〃鏌ヨ")
+    @GetMapping(value = "/list")
+    public Result<IPage<AndonResponseConfig>> queryPageList(AndonResponseConfig andonResponseConfig,
+                                                            @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                            @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                            HttpServletRequest req) {
+        QueryWrapper<AndonResponseConfig> queryWrapper = QueryGenerator.initQueryWrapper(andonResponseConfig, req.getParameterMap());
+        Page<AndonResponseConfig> page = new Page<AndonResponseConfig>(pageNo, pageSize);
+        IPage<AndonResponseConfig> pageList = andonResponseConfigService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
 
-   /**
-    *   娣诲姞
-    *
-    * @param andonResponseConfig
-    * @return
-    */
-   @AutoLog(value = "瀹夌伅鍝嶅簲閰嶇疆-娣诲姞")
-   @ApiOperation(value="瀹夌伅鍝嶅簲閰嶇疆-娣诲姞", notes="瀹夌伅鍝嶅簲閰嶇疆-娣诲姞")
-   //@RequiresPermissions("org.jeecg.modules:andon_response_config:add")
-   @PostMapping(value = "/add")
-   public Result<String> add(@RequestBody AndonResponseConfig andonResponseConfig) {
-       andonResponseConfigService.save(andonResponseConfig);
-       return Result.OK("娣诲姞鎴愬姛锛�");
-   }
 
-   /**
-    *  缂栬緫
-    *
-    * @param andonResponseConfig
-    * @return
-    */
-   @AutoLog(value = "瀹夌伅鍝嶅簲閰嶇疆-缂栬緫")
-   @ApiOperation(value="瀹夌伅鍝嶅簲閰嶇疆-缂栬緫", notes="瀹夌伅鍝嶅簲閰嶇疆-缂栬緫")
-   //@RequiresPermissions("org.jeecg.modules:andon_response_config:edit")
-   @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
-   public Result<String> edit(@RequestBody AndonResponseConfig andonResponseConfig) {
-       andonResponseConfigService.updateById(andonResponseConfig);
-       return Result.OK("缂栬緫鎴愬姛!");
-   }
+    /**
+     * 鍙戦�佸畨鐏秷鎭�
+     *
+     * @param andonButtonDTO
+     * @return
+     */
+    @AutoLog(value = "瀹夌伅宸ュ崟-鍙戦�侀涔︽秷鎭�")
+    @ApiOperation(value = "瀹夌伅宸ュ崟-鍙戦�侀涔︽秷鎭�", notes = "瀹夌伅宸ュ崟-鍙戦�侀涔︽秷鎭�")
+    @PostMapping(value = "/sendMessage")
+    public Result<String> sendMessage(@RequestBody AndonButtonDTO andonButtonDTO) {
+        try {
+            andonButtonDTO.setBlinkingFlag(1);
+            // 璋冪敤鏈嶅姟灞傚鐞嗕笟鍔¢�昏緫
+            andonResponseConfigService.sendAndonNotification(andonButtonDTO);
+            return Result.OK("娣诲姞鎴愬姛锛�");
+        } catch (Exception e) {
+            log.error("瀹夌伅宸ュ崟[{}]椋炰功閫氱煡鍙戦�佸け璐�", andonButtonDTO.getId(), e);
+            return Result.error("鍙戦�佹秷鎭け璐�: " + e.getMessage());
+        }
+    }
 
-   /**
-    *   閫氳繃id鍒犻櫎
-    *
-    * @param id
-    * @return
-    */
-   @AutoLog(value = "瀹夌伅鍝嶅簲閰嶇疆-閫氳繃id鍒犻櫎")
-   @ApiOperation(value="瀹夌伅鍝嶅簲閰嶇疆-閫氳繃id鍒犻櫎", notes="瀹夌伅鍝嶅簲閰嶇疆-閫氳繃id鍒犻櫎")
-   //@RequiresPermissions("org.jeecg.modules:andon_response_config:delete")
-   @DeleteMapping(value = "/delete")
-   public Result<String> delete(@RequestParam(name="id",required=true) String id) {
-       andonResponseConfigService.removeById(id);
-       return Result.OK("鍒犻櫎鎴愬姛!");
-   }
+    /**
+     * 娣诲姞
+     *
+     * @param andonResponseConfig
+     * @return
+     */
+    @AutoLog(value = "瀹夌伅鍝嶅簲閰嶇疆-娣诲姞")
+    @ApiOperation(value = "瀹夌伅鍝嶅簲閰嶇疆-娣诲姞", notes = "瀹夌伅鍝嶅簲閰嶇疆-娣诲姞")
+    @PostMapping(value = "/add")
+    public Result<String> add(@RequestBody AndonResponseConfig andonResponseConfig) {
+        andonResponseConfigService.save(andonResponseConfig);
+        return Result.OK("娣诲姞鎴愬姛锛�");
+    }
 
-   /**
-    *  鎵归噺鍒犻櫎
-    *
-    * @param ids
-    * @return
-    */
-   @AutoLog(value = "瀹夌伅鍝嶅簲閰嶇疆-鎵归噺鍒犻櫎")
-   @ApiOperation(value="瀹夌伅鍝嶅簲閰嶇疆-鎵归噺鍒犻櫎", notes="瀹夌伅鍝嶅簲閰嶇疆-鎵归噺鍒犻櫎")
-   //@RequiresPermissions("org.jeecg.modules:andon_response_config:deleteBatch")
-   @DeleteMapping(value = "/deleteBatch")
-   public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
-       this.andonResponseConfigService.removeByIds(Arrays.asList(ids.split(",")));
-       return Result.OK("鎵归噺鍒犻櫎鎴愬姛!");
-   }
+    /**
+     * 缂栬緫
+     *
+     * @param andonResponseConfig
+     * @return
+     */
+    @AutoLog(value = "瀹夌伅鍝嶅簲閰嶇疆-缂栬緫")
+    @ApiOperation(value = "瀹夌伅鍝嶅簲閰嶇疆-缂栬緫", notes = "瀹夌伅鍝嶅簲閰嶇疆-缂栬緫")
+    //@RequiresPermissions("org.jeecg.modules:andon_response_config:edit")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<String> edit(@RequestBody AndonResponseConfig andonResponseConfig) {
+        andonResponseConfigService.updateById(andonResponseConfig);
+        return Result.OK("缂栬緫鎴愬姛!");
+    }
 
-   /**
-    * 閫氳繃id鏌ヨ
-    *
-    * @param id
-    * @return
-    */
-   //@AutoLog(value = "瀹夌伅鍝嶅簲閰嶇疆-閫氳繃id鏌ヨ")
-   @ApiOperation(value="瀹夌伅鍝嶅簲閰嶇疆-閫氳繃id鏌ヨ", notes="瀹夌伅鍝嶅簲閰嶇疆-閫氳繃id鏌ヨ")
-   @GetMapping(value = "/queryById")
-   public Result<AndonResponseConfig> queryById(@RequestParam(name="id",required=true) String id) {
-       AndonResponseConfig andonResponseConfig = andonResponseConfigService.getById(id);
-       if(andonResponseConfig==null) {
-           return Result.error("鏈壘鍒板搴旀暟鎹�");
-       }
-       return Result.OK(andonResponseConfig);
-   }
+    /**
+     * 閫氳繃id鍒犻櫎
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "瀹夌伅鍝嶅簲閰嶇疆-閫氳繃id鍒犻櫎")
+    @ApiOperation(value = "瀹夌伅鍝嶅簲閰嶇疆-閫氳繃id鍒犻櫎", notes = "瀹夌伅鍝嶅簲閰嶇疆-閫氳繃id鍒犻櫎")
+    //@RequiresPermissions("org.jeecg.modules:andon_response_config:delete")
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+        andonResponseConfigService.removeById(id);
+        return Result.OK("鍒犻櫎鎴愬姛!");
+    }
 
-   /**
-   * 瀵煎嚭excel
-   *
-   * @param request
-   * @param andonResponseConfig
-   */
-   //@RequiresPermissions("org.jeecg.modules:andon_response_config:exportXls")
-   @RequestMapping(value = "/exportXls")
-   public ModelAndView exportXls(HttpServletRequest request, AndonResponseConfig andonResponseConfig) {
-       return super.exportXls(request, andonResponseConfig, AndonResponseConfig.class, "瀹夌伅鍝嶅簲閰嶇疆");
-   }
+    /**
+     * 鎵归噺鍒犻櫎
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "瀹夌伅鍝嶅簲閰嶇疆-鎵归噺鍒犻櫎")
+    @ApiOperation(value = "瀹夌伅鍝嶅簲閰嶇疆-鎵归噺鍒犻櫎", notes = "瀹夌伅鍝嶅簲閰嶇疆-鎵归噺鍒犻櫎")
+    //@RequiresPermissions("org.jeecg.modules:andon_response_config:deleteBatch")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        this.andonResponseConfigService.removeByIds(Arrays.asList(ids.split(",")));
+        return Result.OK("鎵归噺鍒犻櫎鎴愬姛!");
+    }
 
-   /**
+    /**
+     * 閫氳繃id鏌ヨ
+     *
+     * @param id
+     * @return
+     */
+    //@AutoLog(value = "瀹夌伅鍝嶅簲閰嶇疆-閫氳繃id鏌ヨ")
+    @ApiOperation(value = "瀹夌伅鍝嶅簲閰嶇疆-閫氳繃id鏌ヨ", notes = "瀹夌伅鍝嶅簲閰嶇疆-閫氳繃id鏌ヨ")
+    @GetMapping(value = "/queryById")
+    public Result<AndonResponseConfig> queryById(@RequestParam(name = "id", required = true) String id) {
+        AndonResponseConfig andonResponseConfig = andonResponseConfigService.getById(id);
+        if (andonResponseConfig == null) {
+            return Result.error("鏈壘鍒板搴旀暟鎹�");
+        }
+        return Result.OK(andonResponseConfig);
+    }
+
+    /**
+     * 瀵煎嚭excel
+     *
+     * @param request
+     * @param andonResponseConfig
+     */
+    //@RequiresPermissions("org.jeecg.modules:andon_response_config:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, AndonResponseConfig andonResponseConfig) {
+        return super.exportXls(request, andonResponseConfig, AndonResponseConfig.class, "瀹夌伅鍝嶅簲閰嶇疆");
+    }
+
+    /**
      * 閫氳繃excel瀵煎叆鏁版嵁
-   *
-   * @param request
-   * @param response
-   * @return
-   */
-   //@RequiresPermissions("andon_response_config:importExcel")
-   @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
-   public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
-       return super.importExcel(request, response, AndonResponseConfig.class);
-   }
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    //@RequiresPermissions("andon_response_config:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, AndonResponseConfig.class);
+    }
 
 }
diff --git a/src/main/java/org/jeecg/modules/andon/dto/AndonButtonDTO.java b/src/main/java/org/jeecg/modules/andon/dto/AndonButtonDTO.java
new file mode 100644
index 0000000..044b1dd
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/andon/dto/AndonButtonDTO.java
@@ -0,0 +1,83 @@
+package org.jeecg.modules.andon.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecg.common.aspect.annotation.Dict;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+@Data
+public class AndonButtonDTO {
+    /** 鍝嶅簲ID */
+    @ApiModelProperty(value = "鍝嶅簲ID")
+    private String id;
+    /** 鎸夐挳ID */
+    @ApiModelProperty(value = " 鎸夐挳ID ")
+    private String buttonId;
+    /**瀹夌伅鍚嶇О*/
+    @ApiModelProperty(value = "瀹夌伅鍚嶇О")
+    private String buttonName;
+    /**瀹夌伅缂栫爜*/
+    @ApiModelProperty(value = "瀹夌伅缂栫爜")
+    private String buttonCode;
+    /** 涓�绾у搷搴斾汉 */
+    @ApiModelProperty(value = "涓�绾у搷搴斾汉")
+    private String responder;
+
+
+    @ApiModelProperty(value = "浜岀骇鍝嶅簲浜�")
+    private String secondResponder;
+    /**浜х嚎鍚嶇О*/
+    @ApiModelProperty(value = "浜х嚎鍚嶇О")
+    private String factoryName;
+
+    /**浜х嚎鍚嶇О*/
+    @ApiModelProperty(value = "宸ュ巶鍚嶇О")
+    private String parentFactoryName;
+
+    /**涓�绾у搷搴旀椂闀�*/
+    @ApiModelProperty(value = "涓�绾у搷搴旀椂闀�")
+    private Integer upgradeResponseDuration;
+
+
+
+    /**浜岀骇鍝嶅簲鏃堕暱*/
+    @ApiModelProperty(value = "浜岀骇鍝嶅簲鏃堕暱")
+    private Integer secondUpgradeResponseDuration;
+
+    /**涓夌骇绾у搷搴旀椂闀�*/
+    @ApiModelProperty(value = "涓夌骇鍝嶅簲鏃堕暱")
+    private Integer thirdUpgradeResponseDuration;
+
+    /**
+     * 鏄惁闂儊
+     * 瀵瑰簲鏁版嵁搴撹〃涓� is_blinking 瀛楁锛堝ぇ浜�0 鏈夊緟澶勭悊鐨勫伐鍗曢棯锛岀浉鍙嶄笉闂儊锛�
+     */
+    @ApiModelProperty(value = "鏍囪瘑闂儊")
+    private Integer blinkingFlag;
+
+    @ApiModelProperty(value = "涓�绾у搷搴斾汉openId")
+    private String responderOpenId;
+
+    @ApiModelProperty(value = "浜岀骇鍝嶅簲浜簅penId")
+    private String secondResponderOpenId;
+
+    @ApiModelProperty(value = "涓夌骇鍝嶅簲浜簅penId")
+    private String thirdResponderOpenId;
+
+
+
+    @ApiModelProperty(value = "涓夌骇鍝嶅簲浜�")
+    private String thirdResponder;
+
+
+
+    @ApiModelProperty(value = "宸ュ崟ID")
+    private String orderIds;
+
+    @ApiModelProperty(value = "宸ュ崟鐘舵��")
+    private String orderStatus;
+
+    @ApiModelProperty(value = "瀹夌伅鍙戣捣浜�")
+    private String operator;
+
+}
diff --git a/src/main/java/org/jeecg/modules/andon/entity/AndonButtonConfig.java b/src/main/java/org/jeecg/modules/andon/entity/AndonButtonConfig.java
index 48eeeee..66cbd14 100644
--- a/src/main/java/org/jeecg/modules/andon/entity/AndonButtonConfig.java
+++ b/src/main/java/org/jeecg/modules/andon/entity/AndonButtonConfig.java
@@ -1,12 +1,10 @@
 package org.jeecg.modules.andon.entity;
 
-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 com.baomidou.mybatisplus.annotation.*;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import liquibase.pro.packaged.B;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
@@ -89,4 +87,13 @@
 	@Excel(name = "澶囨敞", width = 15)
     @ApiModelProperty(value = "澶囨敞")
     private String remark;
+
+
+    /**
+     * 鏄惁闂儊
+     * 瀵瑰簲鏁版嵁搴撹〃涓� is_blinking 瀛楁锛坱inyint绫诲瀷锛岄粯璁ゅ��0锛�
+     */
+    @ApiModelProperty(value = "鏍囪瘑闂儊")
+    @TableField(exist = false)
+    private boolean blinkingFlag;
 }
diff --git a/src/main/java/org/jeecg/modules/andon/entity/AndonOrder.java b/src/main/java/org/jeecg/modules/andon/entity/AndonOrder.java
index bdee167..e7e0331 100644
--- a/src/main/java/org/jeecg/modules/andon/entity/AndonOrder.java
+++ b/src/main/java/org/jeecg/modules/andon/entity/AndonOrder.java
@@ -68,6 +68,7 @@
     private String buttonId;
 	/**瀹夌伅浜�*/
 	@Excel(name = "瀹夌伅浜�", width = 15)
+    @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username")
     @ApiModelProperty(value = "瀹夌伅浜�")
     private String operator;
 	/**瀹夌伅鏃堕棿*/
@@ -82,6 +83,7 @@
     @ApiModelProperty(value = "瀹夌伅绛夌骇")
     private String andonLevel;
 	/**鍝嶅簲浜�*/
+    @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username")
 	@Excel(name = "鍝嶅簲浜�", width = 15)
     @ApiModelProperty(value = "鍝嶅簲浜�")
     private String responder;
@@ -92,6 +94,7 @@
     @ApiModelProperty(value = "鍝嶅簲鏃堕棿")
     private Date responseTime;
 	/**澶勭悊浜�*/
+    @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username")
 	@Excel(name = "澶勭悊浜�", width = 15)
     @ApiModelProperty(value = "澶勭悊浜�")
     private String processor;
diff --git a/src/main/java/org/jeecg/modules/andon/entity/AndonResponseConfig.java b/src/main/java/org/jeecg/modules/andon/entity/AndonResponseConfig.java
index 96dd37d..465add1 100644
--- a/src/main/java/org/jeecg/modules/andon/entity/AndonResponseConfig.java
+++ b/src/main/java/org/jeecg/modules/andon/entity/AndonResponseConfig.java
@@ -78,4 +78,7 @@
 	@Excel(name = "涓夌骇鍝嶅簲浜�(鍗囩骇涓ゆ)", width = 15)
     @ApiModelProperty(value = "涓夌骇鍝嶅簲浜�(鍗囩骇涓ゆ)")
     private String thirdResponder;
+
+
+
 }
diff --git a/src/main/java/org/jeecg/modules/andon/mapper/AndonButtonConfigMapper.java b/src/main/java/org/jeecg/modules/andon/mapper/AndonButtonConfigMapper.java
index 2c87ddc..dbf50f1 100644
--- a/src/main/java/org/jeecg/modules/andon/mapper/AndonButtonConfigMapper.java
+++ b/src/main/java/org/jeecg/modules/andon/mapper/AndonButtonConfigMapper.java
@@ -2,7 +2,10 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.andon.dto.AndonButtonDTO;
 import org.jeecg.modules.andon.entity.AndonButtonConfig;
+
+import java.util.List;
 
 /**
  * @Description: 瀹夌伅鎸夐挳閰嶇疆
@@ -12,4 +15,36 @@
  */
 public interface AndonButtonConfigMapper extends BaseMapper<AndonButtonConfig> {
     AndonButtonConfig getAndonButtonById(@Param("id") String id);
+    /**
+     * 瀹夌伅鎸夐挳鍒楄〃
+     * @param factoryId
+     * @return
+     */
+    List<AndonButtonDTO> queryUserAndonButtonList(String factoryId);
+
+    /**
+     * 鍙戣捣瀹夌伅鍒楄〃
+     * @param factoryId
+     * @return
+     */
+    List<AndonButtonDTO> queryUserAndonCallList(String factoryId);
+
+    /**
+     * 鍝嶅簲瀹夌伅鍒楄〃
+     * @param factoryId
+     * @return
+     */
+    List<AndonButtonDTO> queryUserAndonRespondList(String factoryId);
+
+
+    /**
+     * 澶勭悊瀹夌伅鍒楄〃
+     * @param factoryId
+     * @return
+     */
+    List<AndonButtonDTO> queryUserAndonHandelList(String factoryId);
+
 }
+
+
+
diff --git a/src/main/java/org/jeecg/modules/andon/mapper/AndonResponseConfigMapper.java b/src/main/java/org/jeecg/modules/andon/mapper/AndonResponseConfigMapper.java
index 85c537d..6801fdb 100644
--- a/src/main/java/org/jeecg/modules/andon/mapper/AndonResponseConfigMapper.java
+++ b/src/main/java/org/jeecg/modules/andon/mapper/AndonResponseConfigMapper.java
@@ -2,7 +2,10 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.andon.dto.AndonButtonDTO;
 import org.jeecg.modules.andon.entity.AndonResponseConfig;
+
+import java.util.List;
 
 /**
  * @Description: 瀹夌伅鍝嶅簲閰嶇疆
@@ -12,4 +15,5 @@
  */
 public interface AndonResponseConfigMapper extends BaseMapper<AndonResponseConfig> {
     AndonResponseConfig getAndonResponseConfigByFactoryIdAndButtonId(@Param("factoryId") String factoryId, @Param("buttonId") String buttonId);
+
 }
diff --git a/src/main/java/org/jeecg/modules/andon/mapper/xml/AndonButtonConfigMapper.xml b/src/main/java/org/jeecg/modules/andon/mapper/xml/AndonButtonConfigMapper.xml
index ec55989..0475bda 100644
--- a/src/main/java/org/jeecg/modules/andon/mapper/xml/AndonButtonConfigMapper.xml
+++ b/src/main/java/org/jeecg/modules/andon/mapper/xml/AndonButtonConfigMapper.xml
@@ -2,6 +2,204 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.jeecg.modules.andon.mapper.AndonButtonConfigMapper">
     <select id="getAndonButtonById" resultType="org.jeecg.modules.andon.entity.AndonButtonConfig">
-        SELECT * FROM andon_button_config WHERE id = #{id} and del_flag = 0 and button_status = '鍚敤'
+        SELECT *
+        FROM andon_button_config
+        WHERE id = #{id}
+          and del_flag = 0
+          and button_status = '鍚敤'
     </select>
+    <select id="queryUserAndonButtonList" resultType="org.jeecg.modules.andon.dto.AndonButtonDTO">
+        select arc.id,
+               abc.id as button_id,
+               abc.button_name,
+               abc.button_code,
+               (select count(1)
+                from andon_order ao
+                where ao.button_id = arc.button_id
+                  and ao.factory_id = arc.factory_id
+                  and ao.order_status != '3') as blinking_flag, STUFF((SELECT ',' + CAST (ao.id AS VARCHAR)
+            FROM andon_order ao
+            WHERE ao.button_id = arc.button_id
+            and ao.factory_id = arc.factory_id
+            FOR XML PATH ('')), 1, 1, '') as order_ids
+        from andon_response_config arc
+            left join andon_button_config abc
+        on arc.button_id = abc.id
+        where arc.factory_id=#{factoryId};
+    </select>
+
+    <select id="queryUserAndonCallList" resultType="org.jeecg.modules.andon.dto.AndonButtonDTO">
+        select arc.id,
+               abc.id          as buttonId,
+               abc.button_name as buttonName,
+               abc.button_code as buttonCode,
+               (select count(1)
+                from andon_order ao
+                where ao.button_id = arc.button_id
+                  and ao.factory_id = arc.factory_id
+                  and ao.order_status = '1') as blinkingFlag,
+               STUFF((SELECT ',' + CAST (ao.id AS VARCHAR)
+                      FROM andon_order ao
+                      WHERE ao.button_id = arc.button_id
+                        and ao.factory_id = arc.factory_id
+                        and ao.order_status = '1'
+                   FOR XML PATH ('')), 1, 1, '') as orderIds,
+               bf.factory_name as factoryName,
+               parent_bf.factory_name as parentFactoryName,
+               abc.upgrade_response_duration as upgradeResponseDuration,
+               abc.second_upgrade_response_duration as secondUpgradeResponseDuration,
+               arc.firster_responder as responder,
+               arc.second_responder,
+               arc.third_responder,
+               STUFF((SELECT ',' + ao.order_status
+                      FROM andon_order ao
+                      WHERE ao.button_id = arc.button_id
+                        and ao.factory_id = arc.factory_id
+                        and ao.order_status = '1'
+                   FOR XML PATH ('')), 1, 1, '') as orderStatus
+        from andon_response_config arc
+                 left join andon_button_config abc
+                           on arc.button_id = abc.id
+                 left join base_factory bf on arc.factory_id = bf.id
+                 left join base_factory parent_bf on bf.parent_id = parent_bf.id
+        where arc.factory_id=#{factoryId}
+          and (select count (1)
+               from andon_order ao
+               where ao.button_id = arc.button_id
+                 and ao.factory_id = arc.factory_id
+                 and ao.order_status = '1') = 1
+    </select>
+
+    <select id="queryUserAndonRespondList" resultType="org.jeecg.modules.andon.dto.AndonButtonDTO">
+        select arc.id,
+               abc.id                               as buttonId,
+               abc.button_name                      as buttonName,
+               abc.button_code                      as buttonCode,
+               (select count(1)
+                from andon_order ao
+                where ao.button_id = arc.button_id
+                  and ao.factory_id = arc.factory_id
+                  and ao.order_status = '2')        as blinkingFlag,
+               STUFF((SELECT ',' + CAST(ao.id AS VARCHAR)
+                      FROM andon_order ao
+                      WHERE ao.button_id = arc.button_id
+                        and ao.factory_id = arc.factory_id
+                        and ao.order_status = '2'
+                   FOR XML PATH ('')), 1, 1, '')    as orderIds,
+               bf.factory_name                      as factoryName,
+               parent_bf.factory_name               as parentFactoryName,
+               abc.upgrade_response_duration        as upgradeResponseDuration,
+               abc.second_upgrade_response_duration as secondUpgradeResponseDuration,
+               arc.firster_responder                as responder,
+               arc.second_responder,
+               arc.third_responder,
+               STUFF((SELECT ',' + ao.order_status
+                      FROM andon_order ao
+                      WHERE ao.button_id = arc.button_id
+                        and ao.factory_id = arc.factory_id
+                        and ao.order_status = '2'
+                   FOR XML PATH ('')), 1, 1, '')    as orderStatus,
+               (SELECT TOP 1 ao.operator
+                FROM andon_order ao
+                WHERE ao.button_id = arc.button_id
+                  and ao.factory_id = arc.factory_id
+                  and ao.order_status = '2')         as operator
+        from andon_response_config arc
+                 left join andon_button_config abc
+                           on arc.button_id = abc.id
+                 left join base_factory bf on arc.factory_id = bf.id
+                 left join base_factory parent_bf on bf.parent_id = parent_bf.id
+        where arc.factory_id = #{factoryId}
+          and (select count(1)
+               from andon_order ao
+               where ao.button_id = arc.button_id
+                 and ao.factory_id = arc.factory_id
+                 and ao.order_status = '2') = 1
+    </select>
+<!--    <select id="queryUserAndonRespondList" resultType="org.jeecg.modules.andon.dto.AndonButtonDTO">-->
+<!--        select arc.id,-->
+<!--               abc.id                               as buttonId,-->
+<!--               abc.button_name                      as buttonName,-->
+<!--               abc.button_code                      as buttonCode,-->
+<!--               (select count(1)-->
+<!--                from andon_order ao-->
+<!--                where ao.button_id = arc.button_id-->
+<!--                  and ao.factory_id = arc.factory_id-->
+<!--                  and ao.order_status = '2')        as blinkingFlag,-->
+<!--               STUFF((SELECT ',' + CAST(ao.id AS VARCHAR)-->
+<!--                      FROM andon_order ao-->
+<!--                      WHERE ao.button_id = arc.button_id-->
+<!--                        and ao.factory_id = arc.factory_id-->
+<!--                        and ao.order_status = '2'-->
+<!--                   FOR XML PATH ('')), 1, 1, '')    as orderIds,-->
+<!--               bf.factory_name                      as factoryName,-->
+<!--               parent_bf.factory_name               as parentFactoryName,-->
+<!--               abc.upgrade_response_duration        as upgradeResponseDuration,-->
+<!--               abc.second_upgrade_response_duration as secondUpgradeResponseDuration,-->
+<!--               arc.firster_responder                as responder,-->
+<!--               arc.second_responder,-->
+<!--               arc.third_responder,-->
+<!--               STUFF((SELECT ',' + ao.order_status-->
+<!--                      FROM andon_order ao-->
+<!--                      WHERE ao.button_id = arc.button_id-->
+<!--                        and ao.factory_id = arc.factory_id-->
+<!--                        and ao.order_status = '2'-->
+<!--                   FOR XML PATH ('')), 1, 1, '')    as orderStatus-->
+<!--        from andon_response_config arc-->
+<!--                 left join andon_button_config abc-->
+<!--                           on arc.button_id = abc.id-->
+<!--                 left join base_factory bf on arc.factory_id = bf.id-->
+<!--                 left join base_factory parent_bf on bf.parent_id = parent_bf.id-->
+<!--        where arc.factory_id = #{factoryId}-->
+<!--          and (select count(1)-->
+<!--               from andon_order ao-->
+<!--               where ao.button_id = arc.button_id-->
+<!--                 and ao.factory_id = arc.factory_id-->
+<!--                 and ao.order_status = '2') = 1-->
+<!--    </select>-->
+
+
+    <select id="queryUserAndonHandelList" resultType="org.jeecg.modules.andon.dto.AndonButtonDTO">
+        select arc.id,
+               abc.id                               as buttonId,
+               abc.button_name                      as buttonName,
+               abc.button_code                      as buttonCode,
+               (select count(1)
+                from andon_order ao
+                where ao.button_id = arc.button_id
+                  and ao.factory_id = arc.factory_id
+                  and ao.order_status = '3')        as blinkingFlag,
+               STUFF((SELECT ',' + CAST(ao.id AS VARCHAR)
+                      FROM andon_order ao
+                      WHERE ao.button_id = arc.button_id
+                        and ao.factory_id = arc.factory_id
+                        and ao.order_status = '3'
+                   FOR XML PATH ('')), 1, 1, '')    as orderIds,
+               bf.factory_name                      as factoryName,
+               parent_bf.factory_name               as parentFactoryName,
+               abc.upgrade_response_duration        as upgradeResponseDuration,
+               abc.second_upgrade_response_duration as secondUpgradeResponseDuration,
+               arc.firster_responder                as responder,
+               arc.second_responder,
+               arc.third_responder,
+               STUFF((SELECT ',' + ao.order_status
+                      FROM andon_order ao
+                      WHERE ao.button_id = arc.button_id
+                        and ao.factory_id = arc.factory_id
+                        and ao.order_status = '3'
+                   FOR XML PATH ('')), 1, 1, '')    as orderStatus
+        from andon_response_config arc
+                 left join andon_button_config abc
+                           on arc.button_id = abc.id
+                 left join base_factory bf on arc.factory_id = bf.id
+                 left join base_factory parent_bf on bf.parent_id = parent_bf.id
+        where arc.factory_id = #{factoryId}
+          and (select count(1)
+               from andon_order ao
+               where ao.button_id = arc.button_id
+                 and ao.factory_id = arc.factory_id
+                 and ao.order_status = '3') = 1
+    </select>
+
+
 </mapper>
\ No newline at end of file
diff --git a/src/main/java/org/jeecg/modules/andon/mapper/xml/AndonResponseConfigMapper.xml b/src/main/java/org/jeecg/modules/andon/mapper/xml/AndonResponseConfigMapper.xml
index 2f95e67..650b483 100644
--- a/src/main/java/org/jeecg/modules/andon/mapper/xml/AndonResponseConfigMapper.xml
+++ b/src/main/java/org/jeecg/modules/andon/mapper/xml/AndonResponseConfigMapper.xml
@@ -1,7 +1,13 @@
 <?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="org.jeecg.modules.andon.mapper.AndonResponseConfigMapper">
-    <select id="getAndonResponseConfigByFactoryIdAndButtonId" resultType="org.jeecg.modules.andon.entity.AndonResponseConfig">
-        SELECT * FROM andon_response_config WHERE factory_id = #{factoryId} AND button_id = #{buttonId} AND del_flag = 0
+    <select id="getAndonResponseConfigByFactoryIdAndButtonId"
+            resultType="org.jeecg.modules.andon.entity.AndonResponseConfig">
+        SELECT *
+        FROM andon_response_config
+        WHERE factory_id = #{factoryId}
+          AND button_id = #{buttonId}
+          AND del_flag = 0
     </select>
-</mapper>
\ No newline at end of file
+
+</mapper>
diff --git a/src/main/java/org/jeecg/modules/andon/service/IAndonButtonConfigService.java b/src/main/java/org/jeecg/modules/andon/service/IAndonButtonConfigService.java
index a3bd9e1..500343c 100644
--- a/src/main/java/org/jeecg/modules/andon/service/IAndonButtonConfigService.java
+++ b/src/main/java/org/jeecg/modules/andon/service/IAndonButtonConfigService.java
@@ -1,7 +1,10 @@
 package org.jeecg.modules.andon.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.andon.dto.AndonButtonDTO;
 import org.jeecg.modules.andon.entity.AndonButtonConfig;
+
+import java.util.List;
 
 /**
  * @Description: 瀹夌伅鎸夐挳閰嶇疆
@@ -11,4 +14,35 @@
  */
 public interface IAndonButtonConfigService extends IService<AndonButtonConfig> {
     AndonButtonConfig getAndonButtonById(String id);
+
+    /**
+     * 鏌ヨ鐢ㄦ埛瀹夌伅鎸夐挳鍒楄〃
+     * @param factoryId
+     * @return
+     */
+    List<AndonButtonDTO> queryUserAndonButtonList(String factoryId);
+
+
+    /**
+     * 鏌ヨ鐢ㄦ埛鍙戣捣瀹夌伅鎸夐挳鍒楄〃
+     * @param factoryId
+     * @return
+     */
+    List<AndonButtonDTO> queryUserAndonCallList(String factoryId);
+
+    /**
+     * 鏌ヨ鐢ㄦ埛鍙戣捣瀹夌伅鍝嶅簲鍒楄〃
+     * @param factoryId
+     * @return
+     */
+    List<AndonButtonDTO> queryUserAndonRespondList(String factoryId);
+
+
+    /**
+     * 鏌ヨ鐢ㄦ埛鍙戣捣瀹夌伅澶勭悊鍒楄〃
+     * @param factoryId
+     * @return
+     */
+    List<AndonButtonDTO> queryUserAndonHandelList(String factoryId);
+
 }
diff --git a/src/main/java/org/jeecg/modules/andon/service/IAndonOrderService.java b/src/main/java/org/jeecg/modules/andon/service/IAndonOrderService.java
index a2cc301..c4485d3 100644
--- a/src/main/java/org/jeecg/modules/andon/service/IAndonOrderService.java
+++ b/src/main/java/org/jeecg/modules/andon/service/IAndonOrderService.java
@@ -1,6 +1,7 @@
 package org.jeecg.modules.andon.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.andon.entity.AndonOrder;
 
 import java.util.List;
@@ -14,4 +15,20 @@
 public interface IAndonOrderService extends IService<AndonOrder> {
     //宸插畬鎴愮姸鎬侀櫎澶�
     List<AndonOrder> getAndonOrdersExceptYWC();
+
+    /**
+     * 鑾峰彇宸ュ崟鐨勫垵濮嬪搷搴斾汉
+     * @param andonOrder
+     * @return
+     */
+    String getPrimaryResponder(AndonOrder andonOrder);
+
+
+
+    /**
+     * 澶勭悊瀹夌伅宸ュ崟
+     * @param andonOrder
+     * @return
+     */
+    Result<String> handleAndonOrder(AndonOrder andonOrder);
 }
diff --git a/src/main/java/org/jeecg/modules/andon/service/IAndonResponseConfigService.java b/src/main/java/org/jeecg/modules/andon/service/IAndonResponseConfigService.java
index aaac967..58aa6bb 100644
--- a/src/main/java/org/jeecg/modules/andon/service/IAndonResponseConfigService.java
+++ b/src/main/java/org/jeecg/modules/andon/service/IAndonResponseConfigService.java
@@ -1,7 +1,10 @@
 package org.jeecg.modules.andon.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.andon.dto.AndonButtonDTO;
 import org.jeecg.modules.andon.entity.AndonResponseConfig;
+
+import java.util.List;
 
 /**
  * @Description: 瀹夌伅鍝嶅簲閰嶇疆
@@ -11,4 +14,14 @@
  */
 public interface IAndonResponseConfigService extends IService<AndonResponseConfig> {
     AndonResponseConfig getAndonResponseConfigByFactoryIdAndButtonId(String factoryId, String buttonId);
+
+
+
+
+    /**
+     * 鍙戦�佸畨鐏�氱煡
+     * @param andonButtonDTO 瀹夌伅鎸夐挳DTO
+     * @return 缁撴灉
+     */
+    void sendAndonNotification(AndonButtonDTO andonButtonDTO);
 }
diff --git a/src/main/java/org/jeecg/modules/andon/service/impl/AndonButtonConfigServiceImpl.java b/src/main/java/org/jeecg/modules/andon/service/impl/AndonButtonConfigServiceImpl.java
index 92a7933..3dc9212 100644
--- a/src/main/java/org/jeecg/modules/andon/service/impl/AndonButtonConfigServiceImpl.java
+++ b/src/main/java/org/jeecg/modules/andon/service/impl/AndonButtonConfigServiceImpl.java
@@ -1,10 +1,14 @@
 package org.jeecg.modules.andon.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.andon.dto.AndonButtonDTO;
 import org.jeecg.modules.andon.entity.AndonButtonConfig;
 import org.jeecg.modules.andon.mapper.AndonButtonConfigMapper;
 import org.jeecg.modules.andon.service.IAndonButtonConfigService;
 import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
 
 /**
  * @Description: 瀹夌伅鎸夐挳閰嶇疆
@@ -19,4 +23,26 @@
     public AndonButtonConfig getAndonButtonById(String id) {
         return baseMapper.getAndonButtonById(id);
     }
+
+    @Override
+    public List<AndonButtonDTO> queryUserAndonButtonList(String factoryId) {
+        return baseMapper.queryUserAndonButtonList(factoryId);
+    }
+
+    @Override
+    public List<AndonButtonDTO> queryUserAndonCallList(String factoryId) {
+        return baseMapper.queryUserAndonCallList(factoryId);
+    }
+
+    @Override
+    public List<AndonButtonDTO> queryUserAndonRespondList(String factoryId) {
+        return baseMapper.queryUserAndonRespondList(factoryId);
+    }
+
+    @Override
+    public List<AndonButtonDTO> queryUserAndonHandelList(String factoryId) {
+        return baseMapper.queryUserAndonHandelList(factoryId);
+    }
+
+
 }
diff --git a/src/main/java/org/jeecg/modules/andon/service/impl/AndonOrderServiceImpl.java b/src/main/java/org/jeecg/modules/andon/service/impl/AndonOrderServiceImpl.java
index 1152cfd..e9b6a34 100644
--- a/src/main/java/org/jeecg/modules/andon/service/impl/AndonOrderServiceImpl.java
+++ b/src/main/java/org/jeecg/modules/andon/service/impl/AndonOrderServiceImpl.java
@@ -1,9 +1,18 @@
 package org.jeecg.modules.andon.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.andon.entity.AndonResponseConfig;
+import org.jeecg.modules.andon.mapper.AndonResponseConfigMapper;
 import org.jeecg.modules.andon.service.IAndonOrderService;
 import org.jeecg.modules.andon.entity.AndonOrder;
 import org.jeecg.modules.andon.mapper.AndonOrderMapper;
+import org.jeecg.modules.feishu.service.FeishuUserService;
+import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.service.ISysUserService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -11,14 +20,78 @@
 /**
  * @Description: 瀹夌伅宸ュ崟
  * @Author: jeecg-boot
- * @Date:   2025-07-10
+ * @Date: 2025-07-10
  * @Version: V1.0
  */
 @Service
 public class AndonOrderServiceImpl extends ServiceImpl<AndonOrderMapper, AndonOrder> implements IAndonOrderService {
+    @Autowired
+    private FeishuUserService feishuService;
+    @Autowired
+    private ISysUserService sysUserService;
+
+    @Autowired
+    private AndonResponseConfigMapper andonResponseConfigMapper;
 
     @Override
     public List<AndonOrder> getAndonOrdersExceptYWC() {
         return baseMapper.getAndonOrdersExceptYWC();
     }
+
+    @Override
+    public String getPrimaryResponder(AndonOrder andonOrder) {
+        // 1. 鏍¢獙蹇呰鍙傛暟
+        if (StringUtils.isBlank(andonOrder.getFactoryId()) || StringUtils.isBlank(andonOrder.getButtonId())) {
+
+            return null;
+        }
+
+        // 2. 鏌ヨ鍝嶅簲浜洪厤缃紙鍋囪瀛樺湪鍝嶅簲浜洪厤缃疄浣撳拰Mapper锛�
+        // 鏋勫缓鏌ヨ鏉′欢锛氬尮閰嶄骇绾縄D銆佸畨鐏被鍨婭D锛屼笖閰嶇疆涓哄惎鐢ㄧ姸鎬�
+        QueryWrapper<AndonResponseConfig> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("factory_id", andonOrder.getFactoryId())
+                .eq("button_id", andonOrder.getButtonId())
+                .eq("status", 1) // 1琛ㄧず鍚敤鐘舵��
+                .last("limit 1"); // 鍙彇涓�鏉℃湁鏁堥厤缃�
+
+        // 3. 鎵ц鏌ヨ
+        AndonResponseConfig config = andonResponseConfigMapper.selectOne(queryWrapper);
+        if (config == null) {
+            return null;
+        }
+        return config.getFirsterResponder();
+    }
+
+    @Override
+    public Result<String> handleAndonOrder(AndonOrder andonOrder) {
+
+        // 璁剧疆宸ュ崟鐘舵�佷负澶勭悊涓�
+        andonOrder.setOrderStatus("3");
+
+        // 鑾峰彇鍝嶅簲鑰呯敤鎴峰悕
+        String responderUsername = andonOrder.getResponder();
+
+        // 楠岃瘉鍝嶅簲鑰呯敤鎴峰悕涓嶄负绌�
+        if (StringUtils.isBlank(responderUsername)) {
+            return Result.error("鍝嶅簲鑰呬俊鎭笉鑳戒负绌�");
+        }
+
+        // 鏍规嵁鐢ㄦ埛鍚嶆煡璇㈢敤鎴蜂俊鎭�
+        SysUser sysUser = sysUserService.getOne(
+                new QueryWrapper<SysUser>().eq("username", responderUsername)
+        );
+
+        // 楠岃瘉鐢ㄦ埛鏄惁瀛樺湪
+        if (sysUser == null) {
+            return Result.error("鎵句笉鍒扮敤鎴峰悕涓� " + responderUsername + " 鐨勭敤鎴�");
+        }
+        // 璁剧疆鍝嶅簲鑰匢D
+        andonOrder.setResponder(sysUser.getId());
+        andonOrder.setProcessor(sysUser.getId());
+        // 鏇存柊宸ュ崟淇℃伅
+        this.updateById(andonOrder);
+
+        return Result.OK("澶勭悊鎴愬姛");
+    }
+
 }
diff --git a/src/main/java/org/jeecg/modules/andon/service/impl/AndonResponseConfigServiceImpl.java b/src/main/java/org/jeecg/modules/andon/service/impl/AndonResponseConfigServiceImpl.java
index 04db58b..f6f23ae 100644
--- a/src/main/java/org/jeecg/modules/andon/service/impl/AndonResponseConfigServiceImpl.java
+++ b/src/main/java/org/jeecg/modules/andon/service/impl/AndonResponseConfigServiceImpl.java
@@ -1,22 +1,215 @@
 package org.jeecg.modules.andon.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang.StringUtils;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.andon.dto.AndonButtonDTO;
+import org.jeecg.modules.andon.entity.AndonButtonConfig;
+import org.jeecg.modules.andon.entity.AndonOrder;
 import org.jeecg.modules.andon.entity.AndonResponseConfig;
 import org.jeecg.modules.andon.mapper.AndonResponseConfigMapper;
+import org.jeecg.modules.andon.service.IAndonButtonConfigService;
+import org.jeecg.modules.andon.service.IAndonOrderService;
 import org.jeecg.modules.andon.service.IAndonResponseConfigService;
+import org.jeecg.modules.base.entity.Factory;
+import org.jeecg.modules.base.service.IFactoryService;
+import org.jeecg.modules.feishu.service.FeishuUserService;
+import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.service.ISysUserService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.List;
 
 /**
  * @Description: 瀹夌伅鍝嶅簲閰嶇疆
  * @Author: jeecg-boot
- * @Date:   2025-07-10
+ * @Date: 2025-07-10
  * @Version: V1.0
  */
 @Service
 public class AndonResponseConfigServiceImpl extends ServiceImpl<AndonResponseConfigMapper, AndonResponseConfig> implements IAndonResponseConfigService {
+    @Autowired
+    private IFactoryService factoryService;
+
+    @Autowired
+    private ISysUserService iSysUserService;
+
+    @Autowired
+    private FeishuUserService feishuUserService;
+    @Autowired
+    private IAndonButtonConfigService andonButtonConfigService;
+
+    @Autowired
+    private IAndonOrderService andonOrderService;
 
     @Override
     public AndonResponseConfig getAndonResponseConfigByFactoryIdAndButtonId(String factoryId, String buttonId) {
-        return baseMapper.getAndonResponseConfigByFactoryIdAndButtonId(factoryId,buttonId);
+        return baseMapper.getAndonResponseConfigByFactoryIdAndButtonId(factoryId, buttonId);
     }
+
+
+
+    @Override
+    public void sendAndonNotification(AndonButtonDTO andonButtonDTO) {
+        /**
+         * 1. 楠岃瘉宸ュ崟鐘舵��
+         */
+        if (andonButtonDTO == null) {
+            log.warn("璇锋眰鍙傛暟涓虹┖");
+            throw new IllegalArgumentException("璇锋眰鍙傛暟涓嶈兘涓虹┖");
+        }
+        /**
+         * 璁剧疆瀹夌伅浜�
+         */
+
+        /**
+         * 2. 鑾峰彇鍝嶅簲閰嶇疆
+         */
+        AndonResponseConfig andonResponseConfig = this.getById(andonButtonDTO.getId());
+
+        AndonOrder andonOrder = andonOrderService.getById(andonButtonDTO.getOrderIds());
+        if (andonOrder == null) {
+            log.warn("鏈壘鍒癐D涓篬{}]鐨勫畨鐏鍗�");
+            throw new IllegalArgumentException("鏈壘鍒板搴旂殑瀹夌伅璁㈠崟");
+        }
+        // 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛
+        LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        if (loginUser != null) {
+            log.warn("鏈壘鍒板綋鍓嶇敤鎴�");
+
+        }
+        assert loginUser != null;
+        andonOrder.setResponder(loginUser.getId());
+        String orderStatus = andonOrder.getOrderStatus();
+        andonButtonDTO.setOrderStatus(orderStatus);
+        if (andonResponseConfig == null) {
+            log.warn("鏈壘鍒癐D涓篬{}]鐨勫搷搴旈厤缃�");
+            throw new IllegalArgumentException("鏈壘鍒板搴旂殑鍝嶅簲閰嶇疆");
+        }
+        /**
+         * 3. 璁剧疆浜岀骇鍝嶅簲浜�
+         */
+        String secondResponder = andonResponseConfig.getSecondResponder();
+        if (StringUtils.isNotBlank(secondResponder)) {
+            andonButtonDTO.setSecondResponder(secondResponder);
+        }
+
+        /**
+         * 4. 鑾峰彇宸ュ巶淇℃伅
+         */
+
+        String factoryId = andonResponseConfig.getFactoryId();
+        if (factoryId == null || factoryId.isEmpty()) {
+            log.warn("鍝嶅簲閰嶇疆[{}]鏈缃伐鍘侷D");
+            throw new IllegalArgumentException("鍝嶅簲閰嶇疆鏈缃伐鍘備俊鎭�");
+        }
+
+        Factory factory = factoryService.getOne(new QueryWrapper<Factory>()
+                .eq("id", factoryId)
+                .eq("del_flag", 0));
+
+        if (factory == null) {
+            log.warn("鏈壘鍒癐D涓篬{}]鐨勫伐鍘�");
+            throw new IllegalArgumentException("鏈壘鍒板搴旂殑宸ュ巶淇℃伅");
+        }
+
+        /**
+         * 鑾峰彇浜х嚎鍚嶇О
+         */
+        String factoryName = factory.getFactoryName();
+        andonButtonDTO.setFactoryName(factoryName);
+        /**
+         * 6. 璁剧疆宸ュ巶鍚嶇О
+         */
+        String parentId = factory.getParentId();
+        if (parentId != null && !parentId.isEmpty()) {
+            Factory parentFactory = factoryService.getOne(new QueryWrapper<Factory>()
+                    .eq("id", parentId)
+                    .eq("del_flag", 0));
+            if (parentFactory != null) {
+                andonButtonDTO.setParentFactoryName(parentFactory.getFactoryName());
+            }
+        }
+        /**
+         * 6. 鑾峰彇瀹夌伅鎸夐挳閰嶇疆
+         */
+        AndonButtonConfig andonButtonById = andonButtonConfigService.getAndonButtonById(andonButtonDTO.getButtonId());
+        if (andonButtonById == null) {
+            log.warn("鏈壘鍒癐D涓篬{}]鐨勫畨鐏寜閽�");
+            throw new IllegalArgumentException("鏈壘鍒板搴旂殑瀹夌伅鎸夐挳淇℃伅");
+        }
+        /**
+         * 7. 璁剧疆鍝嶅簲鏃堕棿
+         */
+        Integer upgradeResponseDuration = andonButtonById.getUpgradeResponseDuration();
+        andonButtonDTO.setUpgradeResponseDuration(upgradeResponseDuration);
+
+        Integer secondUpgradeResponseDuration = andonButtonById.getSecondUpgradeResponseDuration();
+        andonButtonDTO.setSecondUpgradeResponseDuration(secondUpgradeResponseDuration);
+
+        /**
+         * 8. 鑾峰彇鍝嶅簲浜轰俊鎭�
+         */
+        String firstResponder = andonResponseConfig.getFirsterResponder();
+        String threeResponder = andonResponseConfig.getThirdResponder();
+        SysUser thirdUser = iSysUserService.getUserByName(threeResponder);
+        SysUser userByName = iSysUserService.getUserByName(firstResponder);
+        SysUser secondUser = null;
+
+        if (StringUtils.isNotBlank(secondResponder)) {
+            secondUser = iSysUserService.getUserByName(secondResponder);
+        }
+        /**
+         * 9. 楠岃瘉骞惰缃搷搴斾汉淇℃伅
+         */
+
+        if (userByName == null) {
+            log.warn("鐢ㄦ埛[{}]鏈壘鍒帮紝鏃犳硶鍙戦�侀�氱煡");
+            throw new IllegalArgumentException("鐢ㄦ埛[{}]鏈壘鍒帮紝鏃犳硶鍙戦�侀�氱煡");
+        }
+
+        if (secondUser == null && StringUtils.isNotBlank(secondResponder)) {
+            log.warn("鐢ㄦ埛[{}]鏈壘鍒帮紝鏃犳硶鍙戦�侀�氱煡");
+            throw new IllegalArgumentException("鐢ㄦ埛[{}]鏈壘鍒帮紝鏃犳硶鍙戦�侀�氱煡");
+        }
+
+        if (threeResponder == null) {
+            StringUtils.isNotBlank(null);
+        }
+        //
+        /**
+         * 10. 璁剧疆鍝嶅簲浜虹浉鍏充俊鎭�
+         */
+
+        andonButtonDTO.setResponderOpenId(userByName.getOpenId());
+        andonButtonDTO.setResponder(userByName.getRealname());
+        log.warn("鐢ㄦ埛[{}]宸叉壘鍒帮紝寮�濮嬪彂閫侀�氱煡");
+
+        if (secondUser != null) {
+            andonButtonDTO.setSecondResponderOpenId(secondUser.getOpenId());
+            andonButtonDTO.setSecondResponder(secondUser.getRealname());
+            log.warn("鐢ㄦ埛[{}]宸叉壘鍒帮紝寮�濮嬪彂閫侀�氱煡");
+        }
+        if (thirdUser != null) {
+            andonButtonDTO.setThirdResponderOpenId(thirdUser.getOpenId());
+            andonButtonDTO.setThirdResponder(thirdUser.getRealname());
+            log.warn("鐢ㄦ埛[{}]宸叉壘鍒帮紝寮�濮嬪彂閫侀�氱煡");
+        }
+
+        /**
+         *  11. 鍙戦�侀涔﹂�氱煡
+         */
+        if (StringUtils.isNotBlank(firstResponder)) {
+            String feishuAccessToken = feishuUserService.getFeishuAccessToken();
+            feishuUserService.sendAndonNotification(feishuAccessToken, andonButtonDTO);
+        } else {
+            log.warn("宸ュ崟[{}]鏈壘鍒板搴斿搷搴斾汉锛屾棤娉曞彂閫侀�氱煡");
+        }
+    }
+
+
 }
diff --git a/src/main/java/org/jeecg/modules/cms/mapper/xml/CuttingToolMapper.xml b/src/main/java/org/jeecg/modules/cms/mapper/xml/CuttingToolMapper.xml
index 09b40f2..ccfe624 100644
--- a/src/main/java/org/jeecg/modules/cms/mapper/xml/CuttingToolMapper.xml
+++ b/src/main/java/org/jeecg/modules/cms/mapper/xml/CuttingToolMapper.xml
@@ -15,6 +15,7 @@
         t1.cutting_model cuttingModel,
         t1.drawing_number drawingNumber,
         t1.inventory_warning inventoryWarning,
+        t1.remark remark,
         t2.item_text cuttingCategory
         FROM
         cms_cutting_tool t1
diff --git a/src/main/java/org/jeecg/modules/mes/job/FeishuSyncTask.java b/src/main/java/org/jeecg/modules/feishu/job/FeishuSyncTask.java
similarity index 88%
rename from src/main/java/org/jeecg/modules/mes/job/FeishuSyncTask.java
rename to src/main/java/org/jeecg/modules/feishu/job/FeishuSyncTask.java
index 36e816a..eaa3bae 100644
--- a/src/main/java/org/jeecg/modules/mes/job/FeishuSyncTask.java
+++ b/src/main/java/org/jeecg/modules/feishu/job/FeishuSyncTask.java
@@ -1,7 +1,8 @@
 
-package org.jeecg.modules.mes.job;
+package org.jeecg.modules.feishu.job;
 
 import lombok.extern.slf4j.Slf4j;
+import org.jeecg.modules.feishu.service.FeishuUserService;
 import org.quartz.Job;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
@@ -17,7 +18,7 @@
 public class FeishuSyncTask implements Job {
 
     @Autowired
-    private org.jeecg.modules.mes.job.FeishuUserService feishuUserService;
+    private FeishuUserService feishuUserService;
 
     @Value("${feishu.sync.departmentId:0}")
     private String departmentId;
diff --git a/src/main/java/org/jeecg/modules/feishu/service/FeishuUserService.java b/src/main/java/org/jeecg/modules/feishu/service/FeishuUserService.java
new file mode 100644
index 0000000..92d6b09
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/feishu/service/FeishuUserService.java
@@ -0,0 +1,635 @@
+package org.jeecg.modules.feishu.service;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.util.PasswordUtil;
+import org.jeecg.common.util.RestUtil;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.andon.dto.AndonButtonDTO;
+import org.jeecg.modules.mes.entity.FeishuUser;
+import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.service.ISysUserService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+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.web.client.RestTemplate;
+
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+@Service
+@Slf4j
+public class FeishuUserService {
+    // 绫讳腑瀹氫箟妯℃澘甯搁噺锛堜究浜庣淮鎶わ級
+    private static final String FIRST_LEVEL_TEMPLATE = "銆愬伐鑹哄畨鐏�慭n%s 路 %s 鍙戣捣浜嗗伐鑹哄畨鐏紝璇�%d鍒嗛挓鍐呭湪PDA涓婅繘琛屽搷搴斿鐞嗭紒锛侊紒";
+    private static final String SECOND_LEVEL_TEMPLATE = "銆愬伐鑹哄畨鐏�慭n%s 路 %s 鍙戣捣鐨勫伐鑹哄畨鐏紝%s鏈湪%d鍒嗛挓鍐呭搷搴旓紝璇峰敖蹇潱淇冭繘琛屽搷搴斿鐞嗭紒锛侊紒";
+    @Resource
+    private ISysUserService sysUserService;
+
+    @Resource
+    private RestTemplate restTemplate;
+
+    @Value("${feishu.appId:}")
+    private String appId;
+
+    @Value("${feishu.appSecret:}")
+    private String appSecret;
+
+    @Value("${feishu.url:}")
+    private String feishuUrl;
+
+    // 瀹氭椂浠诲姟绾跨▼姹狅紙鏀寔澶氱骇鍝嶅簲璋冨害锛�
+    private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(5);
+    private final SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
+
+    /**
+     * 鍚屾椋炰功閮ㄩ棬鐢ㄦ埛鍒扮郴缁熺敤鎴疯〃
+     */
+    public void syncFeishuDepartmentUsers(String departmentId) {
+        try {
+            log.info("寮�濮嬪悓姝ラ涔﹂儴闂ㄧ敤鎴凤紝閮ㄩ棬ID: {}", departmentId);
+
+            // 1. 鑾峰彇椋炰功璁块棶浠ょ墝
+            String accessToken = getFeishuAccessToken();
+            if (oConvertUtils.isEmpty(accessToken)) {
+                log.error("鑾峰彇椋炰功璁块棶浠ょ墝澶辫触锛岀粓姝㈠悓姝ユ祦绋�");
+                return;
+            }
+
+            // 2. 鑾峰彇閮ㄩ棬涓嬬殑鐢ㄦ埛鍒楄〃
+            List<FeishuUser> feishuUsers = getDepartmentUsers(accessToken, departmentId);
+            log.info("鑾峰彇鍒伴涔﹂儴闂ㄧ敤鎴锋暟閲�: {}", feishuUsers.size());
+
+            // 3. 鍚屾鍒扮郴缁熺敤鎴疯〃
+            int successCount = 0;
+            int updateCount = 0;
+            int addCount = 0;
+
+            for (FeishuUser feishuUser : feishuUsers) {
+                try {
+                    boolean isUpdated = syncFeishuUserToSystem(feishuUser);
+                    successCount++;
+                    if (isUpdated) {
+                        updateCount++;
+                    } else {
+                        addCount++;
+                    }
+                } catch (Exception e) {
+                    log.error("鍚屾椋炰功鐢ㄦ埛澶辫触锛岀敤鎴稩D: {}", feishuUser.getUserId(), e);
+                }
+            }
+
+            log.info("椋炰功鐢ㄦ埛鍚屾瀹屾垚锛屾�诲鐞�: {}锛屾柊澧�: {}锛屾洿鏂�: {}", successCount, addCount, updateCount);
+        } catch (Exception e) {
+            log.error("鍚屾椋炰功閮ㄩ棬鐢ㄦ埛澶辫触锛岄儴闂↖D: {}", departmentId, e);
+            throw new RuntimeException("鍚屾椋炰功鐢ㄦ埛澶辫触: " + e.getMessage());
+        }
+    }
+
+    public String getFeishuAccessToken() {
+        try {
+            String url = feishuUrl + "open-apis/auth/v3/tenant_access_token/internal";
+
+            log.info("寮�濮嬭幏鍙栭涔﹁闂护鐗岋紝AppId: {}",
+                    appId != null ? appId.substring(0, Math.min(appId.length(), 10)) + "..." : "null");
+
+            JSONObject params = new JSONObject();
+            params.put("app_id", appId);
+            params.put("app_secret", appSecret);
+
+            log.debug("鑾峰彇浠ょ墝璇锋眰鍙傛暟: {}", params.toJSONString());
+
+            JSONObject result = RestUtil.post(url, params);
+
+            log.info("鑾峰彇椋炰功璁块棶浠ょ墝鍝嶅簲: {}", result != null ? result.toJSONString() : "null");
+
+            if (result != null && result.getInteger("code") == 0) {
+                String accessToken = result.getString("tenant_access_token");
+                log.info("鎴愬姛鑾峰彇椋炰功璁块棶浠ょ墝锛屼护鐗岄暱搴�: {}", accessToken != null ? accessToken.length() : 0);
+                return accessToken;
+            } else {
+                log.error("鑾峰彇椋炰功璁块棶浠ょ墝澶辫触锛屽搷搴�: {}", result != null ? result.toJSONString() : "null");
+                if (result != null) {
+                    log.error("閿欒鐮�: {}, 閿欒淇℃伅: {}", result.getInteger("code"), result.getString("msg"));
+                }
+                return null;
+            }
+        } catch (Exception e) {
+            log.error("鑾峰彇椋炰功璁块棶浠ょ墝寮傚父", e);
+            return null;
+        }
+    }
+
+    /**
+     * 鍙戦�佸畨鐏�氱煡娑堟伅锛堟敮鎸佷竴銆佷簩銆佷笁绾у搷搴旓級
+     * 娴佺▼锛�
+     * 1. APP鐐瑰嚮鍙戦�佷竴绾у搷搴旓紙鍒濈骇鍝嶅簲锛�
+     * 2. 涓�绾у搷搴旀椂闀垮悗妫�鏌ョ姸鎬侊紝鏈鐞嗗垯鍙戦�佷簩绾�
+     * 3. 浜岀骇鍝嶅簲鏃堕暱鍚庢鏌ョ姸鎬侊紝鏈鐞嗗垯鍙戦�佷笁绾�
+     */
+    public boolean sendAndonNotification(String accessToken, AndonButtonDTO andonOrde) {
+        try {
+            String currentTime = sdf.format(new Date());
+            log.info("銆恵}銆戣Е鍙戜竴绾у搷搴旓紙鍒濈骇鍝嶅簲锛夛紝瀹夌伅ID: {}", currentTime, andonOrde.getId());
+
+            // 1. 鍙傛暟楠岃瘉
+            if (!validateNotificationParams(andonOrde)) {
+                return false;
+            }
+            if (accessToken == null || accessToken.isEmpty()) {
+                log.error("璁块棶浠ょ墝涓虹┖锛屾棤娉曞彂閫佸畨鐏�氱煡");
+                return false;
+            }
+
+            // 2. 鍙戦�佷竴绾у搷搴旈�氱煡锛堝嵆鏃跺彂閫侊級
+            boolean firstLevelResult = sendLevelNotification(accessToken, andonOrde, 1);
+
+            // 3. 璋冨害浜岀骇鍝嶅簲閫氱煡锛堝欢杩熸椂闂�=涓�绾у搷搴旀椂闀匡級
+            if (firstLevelResult) {
+                int secondDelay = andonOrde.getUpgradeResponseDuration();
+                String secondTime = sdf.format(new Date(System.currentTimeMillis() + secondDelay * 60 * 1000L));
+                log.info("銆恵}銆戜竴绾у搷搴旇皟搴︿簩绾ч�氱煡锛屽欢杩焮}鍒嗛挓锛岄璁″彂閫佹椂闂�: {}",
+                        currentTime, secondDelay, secondTime);
+                scheduleNextLevelNotification(accessToken, andonOrde, 1, secondDelay);
+            } else {
+                log.warn("涓�绾ч�氱煡鍙戦�佸け璐ワ紝缁堟鍚庣画閫氱煡娴佺▼锛屽畨鐏疘D: {}", andonOrde.getId());
+            }
+
+            return firstLevelResult;
+        } catch (Exception e) {
+            log.error("澶勭悊瀹夌伅閫氱煡寮傚父锛屽畨鐏疘D: {}", andonOrde != null ? andonOrde.getId() : "鏈煡", e);
+            return false;
+        }
+    }
+
+    /**
+     * 鍙戦�佹寚瀹氱骇鍒殑閫氱煡
+     * @param level 1-涓�绾э紝2-浜岀骇锛�3-涓夌骇
+     */
+    private boolean sendLevelNotification(String accessToken, AndonButtonDTO andonOrde, int level) {
+        try {
+            String levelDesc = getLevelDesc(level);
+            String openId = getResponderOpenId(andonOrde, level);
+            String currentTime = sdf.format(new Date());
+            log.info("銆恵}銆戝紑濮嬪彂閫亄}绾у畨鐏�氱煡锛屾帴鏀朵汉openId: {}, 瀹夌伅ID: {}",
+                    currentTime, levelDesc, openId, andonOrde.getId());
+
+            // 鏋勫缓璇锋眰URL
+            String url = feishuUrl + "open-apis/im/v1/messages?receive_id_type=open_id";
+            log.info("{}绾ч�氱煡璇锋眰URL: {}", levelDesc, url);
+
+            // 璁剧疆璇锋眰澶�
+            HttpHeaders headers = new HttpHeaders();
+            String authHeader = "Bearer " + accessToken;
+            headers.add("Authorization", authHeader);
+            headers.add("Content-Type", "application/json; charset=utf-8");
+            log.info("璁剧疆{}绾ч�氱煡璇锋眰澶�: Authorization = {}", levelDesc,
+                    authHeader.substring(0, Math.min(30, authHeader.length())) + "...");
+
+            // 鏋勫缓娑堟伅鍐呭
+            JSONObject content = new JSONObject();
+            String notificationContent = buildNotificationContent(andonOrde, level);
+            content.put("text", notificationContent);
+            log.debug("銆恵}銆憑}绾ч�氱煡鍐呭: {}", currentTime, levelDesc, notificationContent);
+
+            // 鏋勫缓璇锋眰浣�
+            JSONObject requestBody = new JSONObject();
+            requestBody.put("receive_id", openId);
+            requestBody.put("msg_type", "text");
+            requestBody.put("content", content.toJSONString());
+            requestBody.put("uuid", "andon_" + andonOrde.getId() + "_level_" + level + "_" + System.currentTimeMillis());
+
+            // 鍙戦�佽姹�
+            HttpEntity<String> requestEntity = new HttpEntity<>(requestBody.toJSONString(), headers);
+            ResponseEntity<String> response = restTemplate.exchange(
+                    url, HttpMethod.POST, requestEntity, String.class
+            );
+
+            // 瑙f瀽鍝嶅簲
+            JSONObject result = JSONObject.parseObject(response.getBody());
+            log.debug("{}绾ч�氱煡API鍝嶅簲: {}", levelDesc, result != null ? result.toJSONString() : "null");
+
+            if (result != null && result.getInteger("code") == 0) {
+                JSONObject data = result.getJSONObject("data");
+                if (data != null) {
+                    log.info("銆恵}銆憑}绾у畨鐏�氱煡鍙戦�佹垚鍔燂紝娑堟伅ID: {}, 瀹夌伅ID: {}",
+                            currentTime, levelDesc, data.getString("message_id"), andonOrde.getId());
+                    return true;
+                } else {
+                    log.warn("{}绾ч�氱煡鍝嶅簲data涓虹┖锛屽畨鐏疘D: {}", levelDesc, andonOrde.getId());
+                    return false;
+                }
+            } else {
+                log.error("鍙戦�亄}绾у畨鐏�氱煡澶辫触锛屽畨鐏疘D: {}", levelDesc, andonOrde.getId());
+                if (result != null) {
+                    log.error("閿欒鐮�: {}, 閿欒淇℃伅: {}", result.getInteger("code"), result.getString("msg"));
+                }
+                return false;
+            }
+
+        } catch (Exception e) {
+            log.error("鍙戦�亄}绾у畨鐏�氱煡寮傚父锛屽畨鐏疘D: {}", getLevelDesc(level), andonOrde.getId(), e);
+            return false;
+        }
+    }
+
+    /**
+     * 璋冨害涓嬩竴绾ч�氱煡锛�1鈫�2鈫�3锛�
+     * @param currentLevel 褰撳墠绾у埆
+     * @param delayMinutes 寤惰繜鍒嗛挓鏁帮紙鐢卞綋鍓嶇骇鍒搷搴旀椂闀垮喅瀹氾級
+     */
+    private void scheduleNextLevelNotification(String accessToken, AndonButtonDTO andonOrde, int currentLevel, int delayMinutes) {
+        int nextLevel = currentLevel + 1;
+        if (nextLevel > 3) {
+            log.info("宸插埌杈炬渶楂樼骇鍒�氱煡锛屾棤闇�缁х画璋冨害锛屽畨鐏疘D: {}", andonOrde.getId());
+            return;
+        }
+
+        String currentLevelDesc = getLevelDesc(currentLevel);
+        String nextLevelDesc = getLevelDesc(nextLevel);
+        String scheduleTime = sdf.format(new Date());
+        String executeTime = sdf.format(new Date(System.currentTimeMillis() + delayMinutes * 60 * 1000L));
+
+        log.info("銆恵}銆戣皟搴}閫氱煡锛屽欢杩焮}鍒嗛挓锛堝綋鍓嶇骇鍒珄}鏃堕暱锛夛紝棰勮鎵ц鏃堕棿: {}",
+                scheduleTime, nextLevelDesc, delayMinutes, currentLevelDesc, executeTime);
+
+        scheduler.schedule(() -> {
+            try {
+                String currentExecuteTime = sdf.format(new Date());
+                log.info("銆恵}銆戝紑濮嬫墽琛寋}閫氱煡妫�鏌ワ紝瀹夌伅ID: {}", currentExecuteTime, nextLevelDesc, andonOrde.getId());
+
+                // 妫�鏌ヨ鍗曠姸鎬侊細3琛ㄧず宸插搷搴旓紝鏃犻渶鍙戦�佷笅涓�绾�
+                if (andonOrde.getOrderStatus() != null && "3".equals(andonOrde.getOrderStatus())) {
+                    log.info("銆恵}銆戣鍗曞凡鍝嶅簲锛坰tatus=3锛夛紝鍙栨秷{}閫氱煡鍙戦�侊紝瀹夌伅ID: {}",
+                            currentExecuteTime, nextLevelDesc, andonOrde.getId());
+                    return;
+                }
+
+                // 妫�鏌ヤ笅涓�绾у搷搴斾汉鏄惁鏈夋晥
+                if (!hasValidResponder(andonOrde, nextLevel)) {
+                    log.warn("銆恵}銆憑}鍝嶅簲浜轰俊鎭棤鏁堬紝鍙栨秷閫氱煡鍙戦�侊紝瀹夌伅ID: {}",
+                            currentExecuteTime, nextLevelDesc, andonOrde.getId());
+                    return;
+                }
+
+                // 鍙戦�佷笅涓�绾ч�氱煡
+                boolean nextLevelResult = sendLevelNotification(accessToken, andonOrde, nextLevel);
+                if (nextLevelResult && nextLevel < 3) {
+
+                    int nextDelay = getResponseDuration(andonOrde, nextLevel);
+                    String nextExecuteTime = sdf.format(new Date(System.currentTimeMillis() + nextDelay * 60 * 1000L));
+                    log.info("銆恵}銆憑}閫氱煡璋冨害涓夌骇閫氱煡锛屽欢杩焮}鍒嗛挓锛岄璁″彂閫佹椂闂�: {}",
+                            currentExecuteTime, nextLevelDesc, nextDelay, nextExecuteTime);
+                    scheduleNextLevelNotification(accessToken, andonOrde, nextLevel, nextDelay);
+                } else if (!nextLevelResult) {
+                    log.warn("銆恵}銆憑}閫氱煡鍙戦�佸け璐ワ紝缁堟鍚庣画璋冨害锛屽畨鐏疘D: {}",
+                            currentExecuteTime, nextLevelDesc, andonOrde.getId());
+                }
+
+            } catch (Exception e) {
+                log.error("鎵ц{}璋冨害浠诲姟寮傚父锛屽畨鐏疘D: {}", nextLevelDesc, andonOrde.getId(), e);
+            }
+        }, delayMinutes, TimeUnit.MINUTES);
+    }
+    /**
+     * 鏋勫缓閫氱煡鍐呭锛堜紭鍖栧垎闅旂锛屾彁鍗囧彲璇绘�э級
+     */
+    private String buildNotificationContent(AndonButtonDTO andonOrde, int level) {
+        // 鑾峰彇宸ュ巶鍚嶇О鍜屼骇绾垮悕绉帮紝鍋氱┖鍊间繚鎶�
+        String parentFactoryName = andonOrde.getParentFactoryName() != null ? andonOrde.getParentFactoryName() : "鏈煡宸ュ巶";
+        String factoryName = andonOrde.getFactoryName() != null ? andonOrde.getFactoryName() : "鏈煡浜х嚎";
+        String content;
+
+        if (level == 1) {
+            // 涓�绾фā鏉匡細浣跨敤"路"鍒嗛殧宸ュ巶鍜屼骇绾�
+            int firstDuration = andonOrde.getUpgradeResponseDuration() != null ? andonOrde.getUpgradeResponseDuration() : 0;
+            content = String.format(FIRST_LEVEL_TEMPLATE, parentFactoryName, factoryName, firstDuration);
+        } else {
+            // 浜岀骇妯℃澘锛氫繚鎸佷竴鑷寸殑鍒嗛殧椋庢牸
+            String prevResponder = getResponderName(andonOrde, level - 1);
+            int prevDuration = getResponseDuration(andonOrde, level - 1);
+
+            prevResponder = oConvertUtils.isEmpty(prevResponder) ? "鏈煡浜哄憳" : prevResponder;
+            prevDuration = Math.max(prevDuration, 0);
+
+            content = String.format(SECOND_LEVEL_TEMPLATE, parentFactoryName, factoryName, prevResponder, prevDuration);
+        }
+
+        log.debug("鏋勫缓{}绾ч�氱煡鍐呭: {}", level, content);
+        return content;
+    }
+//    /**
+//     * 鏋勫缓閫氱煡鍐呭锛堟寜绾у埆浣跨敤涓嶅悓妯℃澘锛�
+//     */
+//    private String buildNotificationContent(AndonButtonDTO andonOrde, int level) {
+//        String factoryName = andonOrde.getFactoryName() != null ? andonOrde.getFactoryName() : "鏈煡浜х嚎";
+//
+//        if (level == 1) {
+//            // 涓�绾фā鏉匡細銆愬伐鑹哄畨鐏�慩XX浜х嚎鍙戣捣浜嗗伐鑹哄畨鐏紝璇穢x鍒嗛挓鍐呭湪PDA涓婅繘琛屽搷搴斿鐞嗭紒锛侊紒
+//            return String.format("銆愬伐鑹哄畨鐏�慭n%s浜х嚎鍙戣捣浜嗗伐鑹哄畨鐏紝璇�%d鍒嗛挓鍐呭湪PDA涓婅繘琛屽搷搴斿鐞嗭紒锛侊紒",
+//                    factoryName,
+//                    andonOrde.getUpgradeResponseDuration());
+//        } else {
+//            // 浜�/涓夌骇妯℃澘锛氥�愬伐鑹哄畨鐏�慩XX锛堜骇绾匡級鍙戣捣鐨勫伐鑹哄畨鐏紝xxx锛堜笂涓�绾у搷搴斾汉锛夋湭鍦▁x鍒嗛挓鍐呭搷搴旓紝璇峰敖蹇潱淇冭繘琛屽搷搴斿鐞嗭紒锛侊紒
+//            String prevLevelDesc = getLevelDesc(level - 1);
+//            String prevResponder = getResponderName(andonOrde, level - 1);
+//            int prevDuration = getResponseDuration(andonOrde, level - 1);
+//
+//            return String.format("銆愬伐鑹哄畨鐏�慭n%s锛堜骇绾匡級鍙戣捣鐨勫伐鑹哄畨鐏紝%s锛�%s鍝嶅簲浜猴級鏈湪%d鍒嗛挓鍐呭搷搴旓紝璇峰敖蹇潱淇冭繘琛屽搷搴斿鐞嗭紒锛侊紒",
+//                    factoryName,
+//                    prevResponder,
+//                    prevLevelDesc,
+//                    prevDuration);
+//        }
+//    }
+
+    /**
+     * 楠岃瘉閫氱煡鐩稿叧鍙傛暟
+     */
+    private boolean validateNotificationParams(AndonButtonDTO andonOrde) {
+        if (andonOrde == null) {
+            log.error("瀹夌伅璁㈠崟淇℃伅涓虹┖");
+            return false;
+        }
+        if (andonOrde.getId() == null) {
+            log.error("瀹夌伅ID涓虹┖");
+            return false;
+        }
+        // 涓�绾у搷搴旀牎楠岋紙蹇呴�夛級
+        if (andonOrde.getResponderOpenId() == null || andonOrde.getResponderOpenId().isEmpty()
+                || andonOrde.getUpgradeResponseDuration() == null || andonOrde.getUpgradeResponseDuration() <= 0) {
+            log.error("涓�绾у搷搴斾汉淇℃伅鏃犳晥锛坥penId鎴栨椂闀跨己澶憋級锛屽畨鐏疘D: {}", andonOrde.getId());
+            return false;
+        }
+        // 浜岀骇鍝嶅簲鏍¢獙锛堣嫢瀛樺湪鍒欏繀閫夊畬鏁达級
+        if (andonOrde.getSecondResponderOpenId() != null && !andonOrde.getSecondResponderOpenId().isEmpty()) {
+            if (andonOrde.getSecondUpgradeResponseDuration() == null || andonOrde.getSecondUpgradeResponseDuration() <= 0) {
+                log.error("浜岀骇鍝嶅簲浜哄瓨鍦ㄤ絾鏃堕暱鏃犳晥锛屽畨鐏疘D: {}", andonOrde.getId());
+                return false;
+            }
+        }
+        // 涓夌骇鍝嶅簲鏍¢獙锛堣嫢瀛樺湪鍒欏繀閫夊畬鏁达級
+        if (andonOrde.getThirdResponderOpenId() != null && !andonOrde.getThirdResponderOpenId().isEmpty()) {
+            if (andonOrde.getSecondUpgradeResponseDuration() == null || andonOrde.getSecondUpgradeResponseDuration() <= 0) {
+                log.error("涓夌骇鍝嶅簲浜哄瓨鍦ㄤ絾浜岀骇鏃堕暱鏃犳晥锛堜笁绾т緷璧栦簩绾ф椂闀匡級锛屽畨鐏疘D: {}", andonOrde.getId());
+                return false;
+            }
+        }
+        return true;
+    }
+
+    // 宸ュ叿鏂规硶锛氳幏鍙栫骇鍒弿杩�
+    private String getLevelDesc(int level) {
+        switch (level) {
+            case 1: return "涓�绾�";
+            case 2: return "浜岀骇";
+            case 3: return "涓夌骇";
+            default: return "鏈煡绾у埆";
+        }
+    }
+
+    // 宸ュ叿鏂规硶锛氳幏鍙栧搷搴斾汉openId
+    private String getResponderOpenId(AndonButtonDTO andonOrde, int level) {
+        switch (level) {
+            case 1: return andonOrde.getResponderOpenId();
+            case 2: return andonOrde.getSecondResponderOpenId();
+            case 3: return andonOrde.getThirdResponderOpenId();
+            default: return null;
+        }
+    }
+
+    // 宸ュ叿鏂规硶锛氳幏鍙栧搷搴斾汉鍚嶇О
+    private String getResponderName(AndonButtonDTO andonOrde, int level) {
+        String name = null;
+        switch (level) {
+            case 1:
+                name = andonOrde.getResponder();
+                break;
+            case 2:
+                name = andonOrde.getSecondResponder();
+                break;
+            case 3:
+                name = andonOrde.getThirdResponder();
+                break;
+            default:
+                name = null;
+        }
+        return name != null ? name : "鏈煡鍝嶅簲浜�";
+    }
+
+    // 宸ュ叿鏂规硶锛氳幏鍙栧搷搴旀椂闀匡紙涓�绾�=浜岀骇寤惰繜锛屼簩绾�=涓夌骇寤惰繜锛�
+    private int getResponseDuration(AndonButtonDTO andonOrde, int level) {
+        int duration = 0;
+        switch (level) {
+            case 1:
+                duration = andonOrde.getUpgradeResponseDuration() != null ? andonOrde.getUpgradeResponseDuration() : 0;
+                break;
+            case 2:
+                duration = andonOrde.getSecondUpgradeResponseDuration() != null ? andonOrde.getSecondUpgradeResponseDuration() : 0;
+                break;
+            case 3:
+                duration = 0; // 涓夌骇鏄渶鍚庝竴绾э紝鏃犻渶寤惰繜
+                break;
+            default:
+                duration = 0;
+        }
+        return duration;
+    }
+
+    // 宸ュ叿鏂规硶锛氬垽鏂寚瀹氱骇鍒搷搴斾汉鏄惁鏈夋晥
+    private boolean hasValidResponder(AndonButtonDTO andonOrde, int level) {
+        String openId = getResponderOpenId(andonOrde, level);
+        return openId != null && !openId.isEmpty();
+    }
+
+    /**
+     * 鑾峰彇閮ㄩ棬鐢ㄦ埛鍒楄〃锛堢洿灞炲憳宸ワ級
+     */
+    private List<FeishuUser> getDepartmentUsers(String accessToken, String departmentId) {
+        List<FeishuUser> userList = new ArrayList<>();
+        try {
+            log.info("寮�濮嬭幏鍙栭涔﹂儴闂ㄧ敤鎴峰垪琛紝閮ㄩ棬ID: {}", departmentId);
+
+            if (accessToken == null || accessToken.isEmpty()) {
+                log.error("璁块棶浠ょ墝涓虹┖锛屾棤娉曠户缁墽琛�");
+                return userList;
+            }
+            log.info("浣跨敤鐨勮闂护鐗屽墠缂�: Bearer {}", accessToken.substring(0, Math.min(20, accessToken.length())) + "...");
+
+            String url = feishuUrl + "open-apis/contact/v3/users/find_by_department";
+            String pageToken = null;
+            int pageNumber = 1;
+
+            do {
+                StringBuilder urlBuilder = new StringBuilder(url);
+                urlBuilder.append("?department_id=").append(departmentId);
+                urlBuilder.append("&department_id_type=open_department_id");
+                urlBuilder.append("&page_size=50");
+                urlBuilder.append("&user_id_type=open_id");
+
+                if (pageToken != null && !pageToken.isEmpty()) {
+                    urlBuilder.append("&page_token=").append(pageToken);
+                }
+
+                log.info("璇锋眰绗瑊}椤垫暟鎹紝URL: {}", pageNumber, urlBuilder.toString());
+
+                HttpHeaders headers = new HttpHeaders();
+                String authHeader = "Bearer " + accessToken;
+                headers.add("Authorization", authHeader);
+                headers.add("Content-Type", "application/json; charset=utf-8");
+                log.info("璁剧疆璇锋眰澶�: Authorization = {}", authHeader.substring(0, Math.min(30, authHeader.length())) + "...");
+
+                HttpEntity<String> requestEntity = new HttpEntity<>(headers);
+                ResponseEntity<String> response = restTemplate.exchange(
+                        urlBuilder.toString(), HttpMethod.GET, requestEntity, String.class
+                );
+
+                JSONObject result = JSONObject.parseObject(response.getBody());
+                log.debug("绗瑊}椤礎PI鍝嶅簲: {}", pageNumber, result != null ? result.toJSONString() : "null");
+
+                if (result != null && result.getInteger("code") == 0) {
+                    JSONObject data = result.getJSONObject("data");
+                    if (data != null) {
+                        Object items = data.get("items");
+                        log.info("绗瑊}椤靛師濮嬬敤鎴锋暟鎹暟閲�: {}", pageNumber, items instanceof List ? ((List<?>) items).size() : 0);
+
+                        if (items != null) {
+                            List<FeishuUser> pageUsers = parseUsers(items);
+                            userList.addAll(pageUsers);
+                            log.info("绗瑊}椤佃В鏋愬悗鐢ㄦ埛鏁伴噺: {}", pageNumber, pageUsers.size());
+                        }
+
+                        pageToken = data.getString("page_token");
+                        boolean hasMore = data.getBooleanValue("has_more");
+                        log.info("绗瑊}椤礹as_more: {}, page_token: {}", pageNumber, hasMore, pageToken);
+                        pageNumber++;
+                    } else {
+                        log.warn("绗瑊}椤礵ata涓虹┖", pageNumber);
+                        break;
+                    }
+                } else {
+                    log.error("鑾峰彇椋炰功閮ㄩ棬鐢ㄦ埛鍒楄〃澶辫触锛屽搷搴�: {}", result != null ? result.toJSONString() : "null");
+                    if (result != null) {
+                        log.error("閿欒鐮�: {}, 閿欒淇℃伅: {}", result.getInteger("code"), result.getString("msg"));
+                    }
+                    break;
+                }
+            } while (pageToken != null && !pageToken.isEmpty());
+
+            log.info("鑾峰彇椋炰功閮ㄩ棬鐢ㄦ埛瀹屾垚锛屾�荤敤鎴锋暟閲�: {}", userList.size());
+
+        } catch (Exception e) {
+            log.error("鑾峰彇椋炰功閮ㄩ棬鐢ㄦ埛鍒楄〃寮傚父", e);
+        }
+        return userList;
+    }
+
+    /**
+     * 瑙f瀽鐢ㄦ埛鏁版嵁
+     */
+    @SuppressWarnings("unchecked")
+    private List<FeishuUser> parseUsers(Object items) {
+        Logger log = LoggerFactory.getLogger(FeishuUserService.class);
+        List<FeishuUser> userList = new ArrayList<>();
+        if (!(items instanceof List)) {
+            log.warn("瑙f瀽鐢ㄦ埛鏁版嵁澶辫触锛宨tems涓嶆槸鍒楄〃绫诲瀷: {}", items);
+            return userList;
+        }
+        List<?> userItems = (List<?>) items;
+        log.info("寮�濮嬭В鏋愰涔︾敤鎴峰垪琛紝鍏眥}鏉¤褰�", userItems.size());
+        for (Object item : userItems) {
+            if (item == null || !(item instanceof Map)) {
+                log.warn("璺宠繃鏃犳晥鐢ㄦ埛鏁版嵁椤癸紝绫诲瀷涓嶅尮閰�: {}", item != null ? item.getClass() : "null");
+                continue;
+            }
+            Map<String, Object> userMap = (Map<String, Object>) item;
+            FeishuUser user = new FeishuUser();
+            user.setOpenId((String) userMap.getOrDefault("open_id", ""));
+
+            String name = (String) userMap.getOrDefault("name", "");
+            if (name.contains(" ")) {
+                String[] parts = name.split(" ");
+                if (parts.length == 2) {
+                    user.setUsername(parts[0].trim());
+                    user.setRealname(parts[1].trim());
+                    user.setWorkNo(parts[0].trim());
+                } else {
+                    user.setUsername(name);
+                    user.setRealname(name);
+                    user.setWorkNo("");
+                    log.warn("椋炰功鐢ㄦ埛name瀛楁鏍煎紡寮傚父锛屾棤娉曟媶鍒嗭紝鍘熷鍊硷細{}", name);
+                }
+            } else {
+                user.setUsername(name);
+                user.setRealname(name);
+                user.setWorkNo("");
+                log.warn("椋炰功鐢ㄦ埛name瀛楁鏃犵┖鏍煎垎闅旓紝鏃犳硶鎷嗗垎锛屽師濮嬪�硷細{}", name);
+            }
+
+            user.setEnName((String) userMap.getOrDefault("en_name", ""));
+            user.setDescription((String) userMap.getOrDefault("description", ""));
+            Object mobileVisibleObj = userMap.get("mobile_visible");
+            user.setMobileVisible(mobileVisibleObj instanceof Boolean ? (Boolean) mobileVisibleObj : false);
+
+            Object avatarObj = userMap.get("avatar");
+            if (avatarObj instanceof Map) {
+                Map<String, Object> avatarMap = (Map<String, Object>) avatarObj;
+                user.setAvatar240((String) avatarMap.getOrDefault("avatar_240", ""));
+                user.setAvatar640((String) avatarMap.getOrDefault("avatar_640", ""));
+                user.setAvatar72((String) avatarMap.getOrDefault("avatar_72", ""));
+                user.setAvatarOrigin((String) avatarMap.getOrDefault("avatar_origin", ""));
+            } else {
+                log.info("鐢ㄦ埛[{}]鏈缃ご鍍忔垨澶村儚鏍煎紡寮傚父", user.getRealname());
+            }
+
+            user.setPassword("123456");
+            user.setOpenId((String) userMap.getOrDefault("open_id", ""));
+            userList.add(user);
+        }
+
+        return userList;
+    }
+
+    /**
+     * 鍚屾鍗曚釜椋炰功鐢ㄦ埛鍒扮郴缁�
+     */
+    private boolean syncFeishuUserToSystem(FeishuUser feishuUser) {
+        String username = feishuUser.getUsername();
+        SysUser existUser = sysUserService.getUserByName(username);
+        SysUser sysUser = new SysUser();
+        sysUser.setUsername(username);
+        sysUser.setStatus(1);
+        sysUser.setDelFlag(0);
+        sysUser.setAvatar(feishuUser.getAvatar640());
+        sysUser.setRealname(feishuUser.getRealname());
+        sysUser.setWorkNo(feishuUser.getWorkNo());
+        String password = "123456", salt = oConvertUtils.randomGen(8);
+        String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(), password, salt);
+        sysUser.setSalt(salt);
+        sysUser.setPassword(passwordEncode);
+        sysUser.setOpenId(feishuUser.getOpenId());
+
+        if (existUser == null) {
+            sysUserService.addUserWithRole(sysUser, "5");
+            log.info("鏂板鐢ㄦ埛: {}", username);
+            return false;
+        } else {
+            sysUser.setId(existUser.getId());
+            sysUserService.editUser(sysUser);
+            log.info("鏇存柊鐢ㄦ埛: {}", username);
+            return true;
+        }
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/mes/controller/MesMaterialTransferDetailController.java b/src/main/java/org/jeecg/modules/mes/controller/MesMaterialTransferDetailController.java
deleted file mode 100644
index 28533aa..0000000
--- a/src/main/java/org/jeecg/modules/mes/controller/MesMaterialTransferDetailController.java
+++ /dev/null
@@ -1,176 +0,0 @@
-package org.jeecg.modules.mes.controller;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.jeecg.common.api.vo.Result;
-import org.jeecg.common.aspect.annotation.AutoLog;
-import org.jeecg.common.system.base.controller.JeecgController;
-import org.jeecg.common.system.query.QueryGenerator;
-import org.jeecg.modules.mes.entity.MesMaterialTransferDetail;
-import org.jeecg.modules.mes.entity.MesMaterialUnloading;
-import org.jeecg.modules.mes.service.IMesMaterialTransferDetailService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.servlet.ModelAndView;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.util.Arrays;
-
-/**
-* @Description: 鐗╂枡鎷夊姩鏄庣粏
-* @Author: jeecg-boot
-* @Date:   2025-07-07
-* @Version: V1.0
-*/
-@Api(tags="鐗╂枡鎷夊姩鏄庣粏")
-@RestController
-@RequestMapping("/mes/mesMaterialTransferDetail")
-@Slf4j
-public class MesMaterialTransferDetailController extends JeecgController<MesMaterialTransferDetail, IMesMaterialTransferDetailService> {
-   @Autowired
-   private IMesMaterialTransferDetailService mesMaterialTransferDetailService;
-
-   /**
-    * 鍒嗛〉鍒楄〃鏌ヨ
-    *
-    * @param mesMaterialTransferDetail
-    * @param pageNo
-    * @param pageSize
-    * @param req
-    * @return
-    */
-   //@AutoLog(value = "鐗╂枡鎷夊姩鏄庣粏-鍒嗛〉鍒楄〃鏌ヨ")
-   @ApiOperation(value="鐗╂枡鎷夊姩鏄庣粏-鍒嗛〉鍒楄〃鏌ヨ", notes="鐗╂枡鎷夊姩鏄庣粏-鍒嗛〉鍒楄〃鏌ヨ")
-   @GetMapping(value = "/list")
-   public Result<IPage<MesMaterialTransferDetail>> queryPageList(MesMaterialTransferDetail mesMaterialTransferDetail,
-                                  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
-                                  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
-                                  HttpServletRequest req) {
-       QueryWrapper<MesMaterialTransferDetail> queryWrapper = QueryGenerator.initQueryWrapper(mesMaterialTransferDetail, req.getParameterMap());
-       Page<MesMaterialTransferDetail> page = new Page<MesMaterialTransferDetail>(pageNo, pageSize);
-       IPage<MesMaterialTransferDetail> pageList = mesMaterialTransferDetailService.page(page, queryWrapper);
-       return Result.OK(pageList);
-   }
-
-   /**
-    *   娣诲姞
-    *
-    * @param mesMaterialTransferDetail
-    * @return
-    */
-   @AutoLog(value = "鐗╂枡鎷夊姩鏄庣粏-娣诲姞")
-   @ApiOperation(value="鐗╂枡鎷夊姩鏄庣粏-娣诲姞", notes="鐗╂枡鎷夊姩鏄庣粏-娣诲姞")
-   //@RequiresPermissions("org.jeecg.modules:mes_material_transfer_detail:add")
-   @PostMapping(value = "/add")
-   public Result<String> add(@RequestBody MesMaterialTransferDetail mesMaterialTransferDetail) {
-       mesMaterialTransferDetailService.save(mesMaterialTransferDetail);
-       return Result.OK("娣诲姞鎴愬姛锛�");
-   }
-
-   /**
-    *  缂栬緫
-    *
-    * @param mesMaterialTransferDetail
-    * @return
-    */
-   @AutoLog(value = "鐗╂枡鎷夊姩鏄庣粏-缂栬緫")
-   @ApiOperation(value="鐗╂枡鎷夊姩鏄庣粏-缂栬緫", notes="鐗╂枡鎷夊姩鏄庣粏-缂栬緫")
-   //@RequiresPermissions("org.jeecg.modules:mes_material_transfer_detail:edit")
-   @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
-   public Result<String> edit(@RequestBody MesMaterialTransferDetail mesMaterialTransferDetail) {
-       mesMaterialTransferDetailService.updateById(mesMaterialTransferDetail);
-       return Result.OK("缂栬緫鎴愬姛!");
-   }
-
-   /**
-    *   閫氳繃id鍒犻櫎
-    *
-    * @param id
-    * @return
-    */
-   @AutoLog(value = "鐗╂枡鎷夊姩鏄庣粏-閫氳繃id鍒犻櫎")
-   @ApiOperation(value="鐗╂枡鎷夊姩鏄庣粏-閫氳繃id鍒犻櫎", notes="鐗╂枡鎷夊姩鏄庣粏-閫氳繃id鍒犻櫎")
-   //@RequiresPermissions("org.jeecg.modules:mes_material_transfer_detail:delete")
-   @DeleteMapping(value = "/delete")
-   public Result<String> delete(@RequestParam(name="id",required=true) String id) {
-       mesMaterialTransferDetailService.removeById(id);
-       return Result.OK("鍒犻櫎鎴愬姛!");
-   }
-
-   /**
-    *  鎵归噺鍒犻櫎
-    *
-    * @param ids
-    * @return
-    */
-   @AutoLog(value = "鐗╂枡鎷夊姩鏄庣粏-鎵归噺鍒犻櫎")
-   @ApiOperation(value="鐗╂枡鎷夊姩鏄庣粏-鎵归噺鍒犻櫎", notes="鐗╂枡鎷夊姩鏄庣粏-鎵归噺鍒犻櫎")
-   //@RequiresPermissions("org.jeecg.modules:mes_material_transfer_detail:deleteBatch")
-   @DeleteMapping(value = "/deleteBatch")
-   public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
-       this.mesMaterialTransferDetailService.removeByIds(Arrays.asList(ids.split(",")));
-       return Result.OK("鎵归噺鍒犻櫎鎴愬姛!");
-   }
-
-   /**
-    * 閫氳繃id鏌ヨ
-    *
-    * @param id
-    * @return
-    */
-   //@AutoLog(value = "鐗╂枡鎷夊姩鏄庣粏-閫氳繃id鏌ヨ")
-   @ApiOperation(value="鐗╂枡鎷夊姩鏄庣粏-閫氳繃id鏌ヨ", notes="鐗╂枡鎷夊姩鏄庣粏-閫氳繃id鏌ヨ")
-   @GetMapping(value = "/queryById")
-   public Result<MesMaterialTransferDetail> queryById(@RequestParam(name="id",required=true) String id) {
-       MesMaterialTransferDetail mesMaterialTransferDetail = mesMaterialTransferDetailService.getById(id);
-       if(mesMaterialTransferDetail==null) {
-           return Result.error("鏈壘鍒板搴旀暟鎹�");
-       }
-       return Result.OK(mesMaterialTransferDetail);
-   }
-
-   /**
-   * 瀵煎嚭excel
-   *
-   * @param request
-   * @param mesMaterialTransferDetail
-   */
-   //@RequiresPermissions("org.jeecg.modules:mes_material_transfer_detail:exportXls")
-   @RequestMapping(value = "/exportXls")
-   public ModelAndView exportXls(HttpServletRequest request, MesMaterialTransferDetail mesMaterialTransferDetail) {
-       return super.exportXls(request, mesMaterialTransferDetail, MesMaterialTransferDetail.class, "鐗╂枡鎷夊姩鏄庣粏");
-   }
-
-   /**
-     * 閫氳繃excel瀵煎叆鏁版嵁
-   *
-   * @param request
-   * @param response
-   * @return
-   */
-   //@RequiresPermissions("mes_material_transfer_detail:importExcel")
-   @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
-   public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
-       return super.importExcel(request, response, MesMaterialTransferDetail.class);
-   }
-   /*
-   * 鏍规嵁requestId鏌ヨ鏄庣粏
-   * @param requestId
-   * */
-   @RequestMapping("/queryTransferDetailBy")
-   public Result<IPage<MesMaterialTransferDetail>> queryUnloadingByLoadingId(MesMaterialTransferDetail mesMaterialTransferDetail, @RequestParam("requestId") String loadingId,
-                                                                        @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
-                                                                        @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
-                                                                        HttpServletRequest req) {
-       QueryWrapper<MesMaterialTransferDetail> queryWrapper = QueryGenerator.initQueryWrapper(mesMaterialTransferDetail, req.getParameterMap());
-       queryWrapper.eq("request_id", loadingId);
-       Page<MesMaterialTransferDetail> page = new Page<MesMaterialTransferDetail>(pageNo, pageSize);
-       IPage<MesMaterialTransferDetail> pageList = mesMaterialTransferDetailService.page(page, queryWrapper);
-        return Result.OK(pageList);
-    }
-}
diff --git a/src/main/java/org/jeecg/modules/mes/controller/MesMaterialTransferRequestController.java b/src/main/java/org/jeecg/modules/mes/controller/MesMaterialTransferRequestController.java
index e7dc83f..a2fe846 100644
--- a/src/main/java/org/jeecg/modules/mes/controller/MesMaterialTransferRequestController.java
+++ b/src/main/java/org/jeecg/modules/mes/controller/MesMaterialTransferRequestController.java
@@ -28,7 +28,7 @@
 */
 @Api(tags="鐗╂枡鎷夊姩鐢宠")
 @RestController
-@RequestMapping("/mesmaterialtransferrequest/mesMaterialTransferRequest")
+@RequestMapping("/mes/mesMaterialTransferRequest")
 @Slf4j
 public class MesMaterialTransferRequestController extends JeecgController<MesMaterialTransferRequest, IMesMaterialTransferRequestService> {
    @Autowired
diff --git a/src/main/java/org/jeecg/modules/mes/entity/MesMaterialTransferDetail.java b/src/main/java/org/jeecg/modules/mes/entity/MesMaterialTransferDetail.java
deleted file mode 100644
index f913256..0000000
--- a/src/main/java/org/jeecg/modules/mes/entity/MesMaterialTransferDetail.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package org.jeecg.modules.mes.entity;
-
-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 com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-import org.jeecgframework.poi.excel.annotation.Excel;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * @Description: 鐗╂枡鎷夊姩鏄庣粏
- * @Author: jeecg-boot
- * @Date:   2025-07-07
- * @Version: V1.0
- */
-@Data
-@TableName("mes_material_transfer_detail")
-@Accessors(chain = true)
-@EqualsAndHashCode(callSuper = false)
-@ApiModel(value="mes_material_transfer_detail瀵硅薄", description="鐗╂枡鎷夊姩鏄庣粏")
-public class MesMaterialTransferDetail implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-	/**涓婚敭*/
-	@TableId(type = IdType.ASSIGN_ID)
-    @ApiModelProperty(value = "涓婚敭")
-    private String id;
-	/**鍒涘缓浜�*/
-    @ApiModelProperty(value = "鍒涘缓浜�")
-    private String createBy;
-	/**鍒涘缓鏃ユ湡*/
-	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
-    @ApiModelProperty(value = "鍒涘缓鏃ユ湡")
-    private Date createTime;
-	/**鏇存柊浜�*/
-    @ApiModelProperty(value = "鏇存柊浜�")
-    private String updateBy;
-	/**鏇存柊鏃ユ湡*/
-	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
-    @ApiModelProperty(value = "鏇存柊鏃ユ湡")
-    private Date updateTime;
-	/**鍒犻櫎鏍囪*/
-	@Excel(name = "鍒犻櫎鏍囪", width = 15)
-    @ApiModelProperty(value = "鍒犻櫎鏍囪")
-    @TableLogic
-    private Integer delFlag;
-	/**鐢宠鍗旾D*/
-	@Excel(name = "鐢宠鍗旾D", width = 15)
-    @ApiModelProperty(value = "鐢宠鍗旾D")
-    private String requestId;
-	/**鐗╂枡缂栫爜*/
-	@Excel(name = "鐗╂枡缂栫爜", width = 15)
-    @ApiModelProperty(value = "鐗╂枡缂栫爜")
-    private String materialNumber;
-	/**鐗╂枡鍚嶇О*/
-	@Excel(name = "鐗╂枡鍚嶇О", width = 15)
-    @ApiModelProperty(value = "鐗╂枡鍚嶇О")
-    private String materialName;
-	/**鐞嗚鎷夊姩鏁伴噺*/
-	@Excel(name = "鐞嗚鎷夊姩鏁伴噺", width = 15)
-    @ApiModelProperty(value = "鐞嗚鎷夊姩鏁伴噺")
-    private Double specifiedQuantity;
-	/**瀹為檯鎷夊姩鏁伴噺*/
-	@Excel(name = "瀹為檯鎷夊姩鏁伴噺", width = 15)
-    @ApiModelProperty(value = "瀹為檯鎷夊姩鏁伴噺")
-    private Double actualQuantity;
-	/**杞﹂棿鍓╀綑鏁伴噺*/
-	@Excel(name = "杞﹂棿鍓╀綑鏁伴噺", width = 15)
-    @ApiModelProperty(value = "杞﹂棿鍓╀綑鏁伴噺")
-    private Double remainingQuantity;
-}
diff --git a/src/main/java/org/jeecg/modules/mes/entity/MesMaterialTransferRequest.java b/src/main/java/org/jeecg/modules/mes/entity/MesMaterialTransferRequest.java
index 09e3660..af2443c 100644
--- a/src/main/java/org/jeecg/modules/mes/entity/MesMaterialTransferRequest.java
+++ b/src/main/java/org/jeecg/modules/mes/entity/MesMaterialTransferRequest.java
@@ -49,57 +49,61 @@
     @ApiModelProperty(value = "鏇存柊鏃ユ湡")
     private Date updateTime;
 	/**鍒犻櫎鏍囪*/
-	@Excel(name = "鍒犻櫎鏍囪", width = 15)
     @ApiModelProperty(value = "鍒犻櫎鏍囪")
     @TableLogic
     private Integer delFlag;
 	/**鎷夊姩鍗曞彿*/
-	@Excel(name = "鎷夊姩鍗曞彿", width = 15)
     @ApiModelProperty(value = "鎷夊姩鍗曞彿")
     private String requestCode;
 	/**宸ュ崟ID*/
-	@Excel(name = "宸ュ崟ID", width = 15)
     @ApiModelProperty(value = "宸ュ崟ID")
     private String workOrderId;
 	/**SAP棰勭暀鍙�*/
-	@Excel(name = "SAP棰勭暀鍙�", width = 15)
     @ApiModelProperty(value = "SAP棰勭暀鍙�")
     private String reservationCode;
 	/**鍙戝竷鐘舵��*/
-	@Excel(name = "鍙戝竷鐘舵��", width = 15, dicCode = "publish_status")
 	@Dict(dicCode = "publish_status")
     @ApiModelProperty(value = "鍙戝竷鐘舵��")
     private String publishStatus;
 	/**璇锋眰鐘舵��*/
-	@Excel(name = "璇锋眰鐘舵��", width = 15, dicCode = "request_status")
 	@Dict(dicCode = "request_status")
     @ApiModelProperty(value = "璇锋眰鐘舵��")
     private String requestStatus;
 	/**璇锋眰鏃堕棿*/
-	@Excel(name = "璇锋眰鏃堕棿", width = 20, format = "yyyy-MM-dd HH:mm:ss")
 	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
     @ApiModelProperty(value = "璇锋眰鏃堕棿")
     private Date requestTime;
 	/**鍘熷簱瀛樺湴*/
-	@Excel(name = "鍘熷簱瀛樺湴", width = 15)
     @ApiModelProperty(value = "鍘熷簱瀛樺湴")
     private String originalWarehouseId;
 	/**鐩爣搴撳瓨鍦�*/
-	@Excel(name = "鐩爣搴撳瓨鍦�", width = 15)
     @ApiModelProperty(value = "鐩爣搴撳瓨鍦�")
     private String targetWarehouseId;
 	/**浼樺厛绾э紙鎷夊姩绫诲瀷锛�*/
-	@Excel(name = "浼樺厛绾э紙鎷夊姩绫诲瀷锛�", width = 15, dicCode = "priority")
-	@Dict(dicCode = "priority")
-    @ApiModelProperty(value = "浼樺厛绾э紙鎷夊姩绫诲瀷锛�")
-    private String priority;
+	@Dict(dicCode = "material_transfer_category")
+    @ApiModelProperty(value = "鎷夊姩绫诲瀷")
+    private String materialTransferCategory;
 	/**鏈�鏅氶厤閫佹椂闂�*/
-	@Excel(name = "鏈�鏅氶厤閫佹椂闂�", width = 20, format = "yyyy-MM-dd HH:mm:ss")
 	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
     @ApiModelProperty(value = "鏈�鏅氶厤閫佹椂闂�")
     private Date latestDeliveryTime;
+    /**鐗╂枡缂栫爜*/
+    @ApiModelProperty(value = "鐗╂枡缂栫爜")
+    private String materialNumber;
+    /**鐗╂枡鍚嶇О*/
+    @ApiModelProperty(value = "鐗╂枡鍚嶇О")
+    private String materialName;
+    /**鐞嗚鎷夊姩鏁伴噺*/
+    @ApiModelProperty(value = "鐞嗚鎷夊姩鏁伴噺")
+    private Double specifiedQuantity;
+    /**瀹為檯鎷夊姩鏁伴噺*/
+    @ApiModelProperty(value = "瀹為檯鎷夊姩鏁伴噺")
+    private Double actualQuantity;
+    /**杞﹂棿鍓╀綑鏁伴噺*/
+    @ApiModelProperty(value = "杞﹂棿鍓╀綑鏁伴噺")
+    private Double remainingQuantity;
 
     @TableField(exist = false)
     @ApiModelProperty(value = "宸ュ崟鍙�")
diff --git a/src/main/java/org/jeecg/modules/mes/entity/MessageResponse.java b/src/main/java/org/jeecg/modules/mes/entity/MessageResponse.java
new file mode 100644
index 0000000..1d5679f
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/mes/entity/MessageResponse.java
@@ -0,0 +1,12 @@
+package org.jeecg.modules.mes.entity;
+
+import lombok.Data;
+
+@Data
+public class MessageResponse {
+    private boolean success;
+    private String message;
+    private String messageId;
+    private Long timestamp;
+
+}
diff --git a/src/main/java/org/jeecg/modules/mes/job/FeishuUserService.java b/src/main/java/org/jeecg/modules/mes/job/FeishuUserService.java
deleted file mode 100644
index b5b3991..0000000
--- a/src/main/java/org/jeecg/modules/mes/job/FeishuUserService.java
+++ /dev/null
@@ -1,327 +0,0 @@
-package org.jeecg.modules.mes.job;
-
-import com.alibaba.fastjson.JSONObject;
-import lombok.extern.slf4j.Slf4j;
-import org.jeecg.common.util.PasswordUtil;
-import org.jeecg.common.util.RestUtil;
-import org.jeecg.common.util.oConvertUtils;
-import org.jeecg.modules.mes.entity.FeishuUser;
-import org.jeecg.modules.system.entity.SysUser;
-import org.jeecg.modules.system.service.ISysUserService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Value;
-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.web.client.RestTemplate;
-
-import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@Service
-@Slf4j
-public class FeishuUserService {
-
-    @Resource
-    private ISysUserService sysUserService;
-
-    @Resource
-    private RestTemplate restTemplate;  // 鏂板RestTemplate渚濊禆娉ㄥ叆
-
-    @Value("${feishu.appId:}")
-    private String appId;
-
-    @Value("${feishu.appSecret:}")
-    private String appSecret;
-
-    @Value("${feishu.url:}")
-    private String feishuUrl;
-
-    /**
-     * 鍚屾椋炰功閮ㄩ棬鐢ㄦ埛鍒扮郴缁熺敤鎴疯〃
-     * @param departmentId 椋炰功閮ㄩ棬ID
-     */
-    public void syncFeishuDepartmentUsers(String departmentId) {
-        try {
-            log.info("寮�濮嬪悓姝ラ涔﹂儴闂ㄧ敤鎴凤紝閮ㄩ棬ID: {}", departmentId);
-
-            // 1. 鑾峰彇椋炰功璁块棶浠ょ墝
-            String accessToken = getFeishuAccessToken();
-            if (oConvertUtils.isEmpty(accessToken)) {
-                log.error("鑾峰彇椋炰功璁块棶浠ょ墝澶辫触锛岀粓姝㈠悓姝ユ祦绋�");
-                return;  // 浠ょ墝鑾峰彇澶辫触鐩存帴杩斿洖锛岄伩鍏嶅悗缁棤鏁堟搷浣�
-            }
-
-            // 2. 鑾峰彇閮ㄩ棬涓嬬殑鐢ㄦ埛鍒楄〃
-            List<FeishuUser> feishuUsers = getDepartmentUsers(accessToken, departmentId);
-            log.info("鑾峰彇鍒伴涔﹂儴闂ㄧ敤鎴锋暟閲�: {}", feishuUsers.size());
-
-            // 3. 鍚屾鍒扮郴缁熺敤鎴疯〃
-            int successCount = 0;
-            int updateCount = 0;
-            int addCount = 0;
-
-            for (FeishuUser feishuUser : feishuUsers) {
-                try {
-                    boolean isUpdated = syncFeishuUserToSystem(feishuUser);
-                    successCount++;
-                    if (isUpdated) {
-                        updateCount++;
-                    } else {
-                        addCount++;
-                    }
-                } catch (Exception e) {
-                    log.error("鍚屾椋炰功鐢ㄦ埛澶辫触锛岀敤鎴稩D: {}", feishuUser.getUserId(), e);
-                }
-            }
-
-            log.info("椋炰功鐢ㄦ埛鍚屾瀹屾垚锛屾�诲鐞�: {}锛屾柊澧�: {}锛屾洿鏂�: {}", successCount, addCount, updateCount);
-        } catch (Exception e) {
-            log.error("鍚屾椋炰功閮ㄩ棬鐢ㄦ埛澶辫触锛岄儴闂↖D: {}", departmentId, e);
-            throw new RuntimeException("鍚屾椋炰功鐢ㄦ埛澶辫触: " + e.getMessage());
-        }
-    }
-
-    private String getFeishuAccessToken() {
-        try {
-            String url = feishuUrl + "open-apis/auth/v3/tenant_access_token/internal";
-
-            log.info("寮�濮嬭幏鍙栭涔﹁闂护鐗岋紝AppId: {}",
-                    appId != null ? appId.substring(0, Math.min(appId.length(), 10)) + "..." : "null");
-
-            JSONObject params = new JSONObject();
-            params.put("app_id", appId);
-            params.put("app_secret", appSecret);
-
-            log.debug("鑾峰彇浠ょ墝璇锋眰鍙傛暟: {}", params.toJSONString());
-
-            JSONObject result = RestUtil.post(url, params);
-
-            log.info("鑾峰彇椋炰功璁块棶浠ょ墝鍝嶅簲: {}", result != null ? result.toJSONString() : "null");
-
-            if (result != null && result.getInteger("code") == 0) {
-                String accessToken = result.getString("tenant_access_token");
-                log.info("鎴愬姛鑾峰彇椋炰功璁块棶浠ょ墝锛屼护鐗岄暱搴�: {}", accessToken != null ? accessToken.length() : 0);
-                return accessToken;
-            } else {
-                log.error("鑾峰彇椋炰功璁块棶浠ょ墝澶辫触锛屽搷搴�: {}", result != null ? result.toJSONString() : "null");
-                if (result != null) {
-                    log.error("閿欒鐮�: {}, 閿欒淇℃伅: {}", result.getInteger("code"), result.getString("msg"));
-                }
-                return null;
-            }
-        } catch (Exception e) {
-            log.error("鑾峰彇椋炰功璁块棶浠ょ墝寮傚父", e);
-            return null;
-        }
-    }
-
-    /**
-     * 鑾峰彇閮ㄩ棬鐢ㄦ埛鍒楄〃锛堢洿灞炲憳宸ワ級
-     */
-    private List<FeishuUser> getDepartmentUsers(String accessToken, String departmentId) {
-        List<FeishuUser> userList = new ArrayList<>();
-        try {
-            log.info("寮�濮嬭幏鍙栭涔﹂儴闂ㄧ敤鎴峰垪琛紝閮ㄩ棬ID: {}", departmentId);
-
-            // 楠岃瘉璁块棶浠ょ墝
-            if (accessToken == null || accessToken.isEmpty()) {
-                log.error("璁块棶浠ょ墝涓虹┖锛屾棤娉曠户缁墽琛�");
-                return userList;
-            }
-            log.info("浣跨敤鐨勮闂护鐗屽墠缂�: Bearer {}", accessToken.substring(0, Math.min(20, accessToken.length())) + "...");
-
-            // 椋炰功API绔偣
-            String url = feishuUrl + "open-apis/contact/v3/users/find_by_department";
-
-            String pageToken = null;
-            int pageNumber = 1;
-
-            do {
-                // 鏋勫缓璇锋眰URL鍜屽弬鏁�
-                StringBuilder urlBuilder = new StringBuilder(url);
-                urlBuilder.append("?department_id=").append(departmentId);
-                urlBuilder.append("&department_id_type=open_department_id");
-                urlBuilder.append("&page_size=50");
-                urlBuilder.append("&user_id_type=open_id");
-
-                if (pageToken != null && !pageToken.isEmpty()) {
-                    urlBuilder.append("&page_token=").append(pageToken);
-                }
-
-                log.info("璇锋眰绗瑊}椤垫暟鎹紝URL: {}", pageNumber, urlBuilder.toString());
-
-                // 璁剧疆璇锋眰澶� - 鍏抽敭淇鐐癸細浣跨敤HttpHeaders纭繚澶翠俊鎭纭缃�
-                HttpHeaders headers = new HttpHeaders();
-                String authHeader = "Bearer " + accessToken;
-                headers.add("Authorization", authHeader);
-                headers.add("Content-Type", "application/json; charset=utf-8");
-                log.info("璁剧疆璇锋眰澶�: Authorization = {}", authHeader.substring(0, Math.min(30, authHeader.length())) + "...");
-
-                // 浣跨敤RestTemplate鍙戦�佽姹傦紝纭繚澶翠俊鎭姝g‘浼犻��
-                HttpEntity<String> requestEntity = new HttpEntity<>(headers);
-                ResponseEntity<String> response = restTemplate.exchange(
-                        urlBuilder.toString(),
-                        HttpMethod.GET,
-                        requestEntity,
-                        String.class
-                );
-
-                // 瑙f瀽鍝嶅簲
-                JSONObject result = JSONObject.parseObject(response.getBody());
-                log.debug("绗瑊}椤礎PI鍝嶅簲: {}", pageNumber, result != null ? result.toJSONString() : "null");
-
-                if (result != null && result.getInteger("code") == 0) {
-                    JSONObject data = result.getJSONObject("data");
-                    if (data != null) {
-                        // 瑙f瀽鐢ㄦ埛鍒楄〃
-                        Object items = data.get("items");
-                        log.info("绗瑊}椤靛師濮嬬敤鎴锋暟鎹暟閲�: {}", pageNumber, items instanceof List ? ((List<?>) items).size() : 0);
-
-                        if (items != null) {
-                            List<FeishuUser> pageUsers = parseUsers(items);
-                            userList.addAll(pageUsers);
-                            log.info("绗瑊}椤佃В鏋愬悗鐢ㄦ埛鏁伴噺: {}", pageNumber, pageUsers.size());
-                        }
-
-                        // 妫�鏌ユ槸鍚︽湁涓嬩竴椤�
-                        pageToken = data.getString("page_token");
-                        boolean hasMore = data.getBooleanValue("has_more");
-                        log.info("绗瑊}椤礹as_more: {}, page_token: {}", pageNumber, hasMore, pageToken);
-                        pageNumber++;
-                    } else {
-                        log.warn("绗瑊}椤礵ata涓虹┖", pageNumber);
-                        break;
-                    }
-                } else {
-                    log.error("鑾峰彇椋炰功閮ㄩ棬鐢ㄦ埛鍒楄〃澶辫触锛屽搷搴�: {}", result != null ? result.toJSONString() : "null");
-                    if (result != null) {
-                        log.error("閿欒鐮�: {}, 閿欒淇℃伅: {}", result.getInteger("code"), result.getString("msg"));
-                    }
-                    break;
-                }
-            } while (pageToken != null && !pageToken.isEmpty());
-
-            log.info("鑾峰彇椋炰功閮ㄩ棬鐢ㄦ埛瀹屾垚锛屾�荤敤鎴锋暟閲�: {}", userList.size());
-
-        } catch (Exception e) {
-            log.error("鑾峰彇椋炰功閮ㄩ棬鐢ㄦ埛鍒楄〃寮傚父", e);
-        }
-        return userList;
-    }
-
-    /**
-     * 瑙f瀽鐢ㄦ埛鏁版嵁
-     */
-    /**
-     * 瑙f瀽鐢ㄦ埛鏁版嵁
-     */
-    @SuppressWarnings("unchecked")
-    private List<FeishuUser> parseUsers(Object items) {
-        Logger log = LoggerFactory.getLogger(FeishuUserService.class);
-        List<FeishuUser> userList = new ArrayList<>();
-        if (!(items instanceof List)) {
-            log.warn("瑙f瀽鐢ㄦ埛鏁版嵁澶辫触锛宨tems涓嶆槸鍒楄〃绫诲瀷: {}", items);
-            return userList;
-        }
-        List<?> userItems = (List<?>) items;
-        log.info("寮�濮嬭В鏋愰涔︾敤鎴峰垪琛紝鍏眥}鏉¤褰�", userItems.size());
-        for (Object item : userItems) {
-            if (item == null || !(item instanceof Map)) {
-                log.warn("璺宠繃鏃犳晥鐢ㄦ埛鏁版嵁椤癸紝绫诲瀷涓嶅尮閰�: {}", item != null ? item.getClass() : "null");
-                continue;
-            }
-            Map<String, Object> userMap = (Map<String, Object>) item;
-            FeishuUser user = new FeishuUser();
-            // 瑙f瀽open_id
-            user.setOpenId((String) userMap.getOrDefault("open_id", ""));
-            // 瑙f瀽name骞舵媶鍒�
-            String name = (String) userMap.getOrDefault("name", "");
-            if (name.contains(" ")) {
-                String[] parts = name.split(" ");
-                if (parts.length == 2) {
-                    user.setUsername(parts[0].trim()); // 宸ュ彿閮ㄥ垎瀛樺埌username
-                    user.setRealname(parts[1].trim()); // 濮撳悕閮ㄥ垎瀛樺埌realname
-                    user.setWorkNo(parts[0].trim());   // 宸ュ彿涔熷瓨鍒皐orkNo
-                } else {
-                    // 鎷嗗垎寮傚父鏃讹紝榛樿澶勭悊
-                    user.setUsername(name);
-                    user.setRealname(name);
-                    user.setWorkNo("");
-                    log.warn("椋炰功鐢ㄦ埛name瀛楁鏍煎紡寮傚父锛屾棤娉曟媶鍒嗭紝鍘熷鍊硷細{}", name);
-                }
-            } else {
-                user.setUsername(name);
-                user.setRealname(name);
-                user.setWorkNo("");
-                log.warn("椋炰功鐢ㄦ埛name瀛楁鏃犵┖鏍煎垎闅旓紝鏃犳硶鎷嗗垎锛屽師濮嬪�硷細{}", name);
-            }
-            // 瑙f瀽鍏朵粬鍩烘湰淇℃伅
-            user.setEnName((String) userMap.getOrDefault("en_name", ""));
-            user.setDescription((String) userMap.getOrDefault("description", ""));
-            Object mobileVisibleObj = userMap.get("mobile_visible");
-            user.setMobileVisible(mobileVisibleObj instanceof Boolean ? (Boolean) mobileVisibleObj : false);
-            // 瑙f瀽澶村儚淇℃伅
-            Object avatarObj = userMap.get("avatar");
-            if (avatarObj instanceof Map) {
-                Map<String, Object> avatarMap = (Map<String, Object>) avatarObj;
-                user.setAvatar240((String) avatarMap.getOrDefault("avatar_240", ""));
-                user.setAvatar640((String) avatarMap.getOrDefault("avatar_640", ""));
-                user.setAvatar72((String) avatarMap.getOrDefault("avatar_72", ""));
-                user.setAvatarOrigin((String) avatarMap.getOrDefault("avatar_origin", ""));
-            } else {
-                log.info("鐢ㄦ埛[{}]鏈缃ご鍍忔垨澶村儚鏍煎紡寮傚父", user.getRealname());
-            }
-            // 璁剧疆榛樿鍔犲瘑瀵嗙爜锛堣繖閲屽亣璁惧瘑鐮佹槸绠�鍗曞姞瀵嗗瓨鍌紝瀹為檯寤鸿鐢ㄦ洿瀹夊叏鐨勫姞瀵嗘柟寮忥級
-            user.setPassword("123456"); // 浣犺姹傜殑榛樿瀵嗙爜
-            // 灏唎pen_id瀛樺埌瀵瑰簲鐨勫瓧娈碉紙鏍规嵁浣犵殑鐢ㄦ埛琛ㄧ粨鏋勶紝鍋囪鐢ㄦ埛琛ㄦ湁open_id瀛楁锛�
-            user.setOpenId((String) userMap.getOrDefault("open_id", ""));
-            userList.add(user);
-        }
-
-        return userList;
-    }
-
-    /**
-     * 鍚屾鍗曚釜椋炰功鐢ㄦ埛鍒扮郴缁�
-     * @param feishuUser 椋炰功鐢ㄦ埛
-     * @return true琛ㄧず鏇存柊锛宖alse琛ㄧず鏂板
-     *
-     * 鍚庢湡澧炲姞锛� 鐢ㄦ埛鍚屾瀵规瘮锛岄涔︾鑱屽憳宸ラ渶瑕佸湪鏈湴鐢ㄦ埛琛ㄩ噷闈㈠皢璇ョ敤鎴风姸鎬佺鐢�
-     */
-    private boolean syncFeishuUserToSystem(FeishuUser feishuUser) {
-        // 杩欓噷鏍规嵁鎷嗗垎鍚庣殑username锛堝伐鍙凤級鍘绘煡璇㈢郴缁熺敤鎴�
-        String username = feishuUser.getUsername();
-        SysUser existUser = sysUserService.getUserByName(username);
-        SysUser sysUser = new SysUser();
-        sysUser.setUsername(username);
-        sysUser.setStatus(1);
-        sysUser.setDelFlag(0);
-        sysUser.setAvatar(feishuUser.getAvatar640());
-        sysUser.setRealname(feishuUser.getRealname());
-        sysUser.setWorkNo(feishuUser.getWorkNo());
-        String password = "123456", salt = oConvertUtils.randomGen(8);
-        String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(), password, salt);
-        sysUser.setSalt(salt);
-        sysUser.setPassword(passwordEncode);
-        sysUser.setOpenId(feishuUser.getOpenId());
-
-        if (existUser == null) {
-
-            sysUserService.addUserWithRole(sysUser, "5");
-            log.info("鏂板鐢ㄦ埛: {}", username);
-            return false;
-        } else {
-            sysUser.setId(existUser.getId());
-            sysUserService.editUser(sysUser);
-            log.info("鏇存柊鐢ㄦ埛: {}", username);
-            return true;
-        }
-    }
-}
diff --git a/src/main/java/org/jeecg/modules/mes/mapper/MesMaterialTransferDetailMapper.java b/src/main/java/org/jeecg/modules/mes/mapper/MesMaterialTransferDetailMapper.java
deleted file mode 100644
index b8e507a..0000000
--- a/src/main/java/org/jeecg/modules/mes/mapper/MesMaterialTransferDetailMapper.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.jeecg.modules.mes.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.jeecg.modules.mes.entity.MesMaterialTransferDetail;
-
-/**
- * @Description: 鐗╂枡鎷夊姩鏄庣粏
- * @Author: jeecg-boot
- * @Date:   2025-07-07
- * @Version: V1.0
- */
-public interface MesMaterialTransferDetailMapper extends BaseMapper<MesMaterialTransferDetail> {
-
-}
diff --git a/src/main/java/org/jeecg/modules/mes/mapper/xml/MesMaterialTransferDetailMapper.xml b/src/main/java/org/jeecg/modules/mes/mapper/xml/MesMaterialTransferDetailMapper.xml
deleted file mode 100644
index e4afcfa..0000000
--- a/src/main/java/org/jeecg/modules/mes/mapper/xml/MesMaterialTransferDetailMapper.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?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="org.jeecg.modules.mes.mapper.MesMaterialTransferDetailMapper">
-
-</mapper>
\ No newline at end of file
diff --git a/src/main/java/org/jeecg/modules/mes/service/IMesMaterialTransferDetailService.java b/src/main/java/org/jeecg/modules/mes/service/IMesMaterialTransferDetailService.java
deleted file mode 100644
index 6208670..0000000
--- a/src/main/java/org/jeecg/modules/mes/service/IMesMaterialTransferDetailService.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.jeecg.modules.mes.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.jeecg.modules.mes.entity.MesMaterialTransferDetail;
-
-/**
- * @Description: 鐗╂枡鎷夊姩鏄庣粏
- * @Author: jeecg-boot
- * @Date:   2025-07-07
- * @Version: V1.0
- */
-public interface IMesMaterialTransferDetailService extends IService<MesMaterialTransferDetail> {
-
-}
diff --git a/src/main/java/org/jeecg/modules/mes/service/impl/MesMaterialTransferDetailServiceImpl.java b/src/main/java/org/jeecg/modules/mes/service/impl/MesMaterialTransferDetailServiceImpl.java
deleted file mode 100644
index a4bf035..0000000
--- a/src/main/java/org/jeecg/modules/mes/service/impl/MesMaterialTransferDetailServiceImpl.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.jeecg.modules.mes.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.jeecg.modules.mes.entity.MesMaterialTransferDetail;
-import org.jeecg.modules.mes.mapper.MesMaterialTransferDetailMapper;
-import org.jeecg.modules.mes.service.IMesMaterialTransferDetailService;
-import org.springframework.stereotype.Service;
-
-/**
- * @Description: 鐗╂枡鎷夊姩鏄庣粏
- * @Author: jeecg-boot
- * @Date:   2025-07-07
- * @Version: V1.0
- */
-@Service
-public class MesMaterialTransferDetailServiceImpl extends ServiceImpl<MesMaterialTransferDetailMapper, MesMaterialTransferDetail> implements IMesMaterialTransferDetailService {
-
-}
diff --git a/src/main/java/org/jeecg/modules/wms/CxfClientUtil.java b/src/main/java/org/jeecg/modules/wms/CxfClientUtil.java
deleted file mode 100644
index 484d2c9..0000000
--- a/src/main/java/org/jeecg/modules/wms/CxfClientUtil.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.jeecg.modules.wms;
-
-import com.alibaba.fastjson.JSONObject;
-import org.apache.cxf.endpoint.Client;
-import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
-
-import javax.xml.namespace.QName;
-
-/**
- * @author Lius
- * @date 2024/6/11 10:16
- */
-public class CxfClientUtil {
-
-    /**
-     * 鍔ㄦ�佽皟鐢�
-     */
-    public static String invokeService(String url, String data, String namespace, String method) throws Exception {
-        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
-        Client client = dcf.createClient(url);
-        QName opName = new QName(namespace, method);
-        Object[] objects = new Object[0];
-        try {
-            objects = client.invoke(opName, data);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        String json = JSONObject.toJSONString(objects[0]);
-        return json;
-    }
-
-}
diff --git a/src/main/java/org/jeecg/modules/wms/MESObjectFactory.java b/src/main/java/org/jeecg/modules/wms/MESObjectFactory.java
new file mode 100644
index 0000000..aecbbed
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/wms/MESObjectFactory.java
@@ -0,0 +1,51 @@
+package org.jeecg.modules.wms;
+
+import org.jeecg.modules.wms.dto.ReceiveWMSScanItemListResponse;
+import org.jeecg.modules.wms.dto.WSResponse;
+import org.jeecg.modules.wms.request.ReceiveWMSScanItemList;
+import org.jeecg.modules.wms.request.WMSWebServiceSendItem;
+
+import javax.xml.bind.annotation.XmlRegistry;
+
+@XmlRegistry
+public class MESObjectFactory {
+    /**
+     * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: org.tempuri
+     *
+     */
+    public MESObjectFactory() {
+    }
+
+    /**
+     * Create an instance of {@link ReceiveWMSScanItemList }
+     *
+     */
+    public ReceiveWMSScanItemList createReceiveWMSScanItemList() {
+        return new ReceiveWMSScanItemList();
+    }
+
+    /**
+     * Create an instance of {@link WMSWebServiceSendItem }
+     *
+     */
+    public WMSWebServiceSendItem createWMSWebServiceSendItem() {
+        return new WMSWebServiceSendItem();
+    }
+
+    /**
+     * Create an instance of {@link ReceiveWMSScanItemListResponse }
+     *
+     */
+    public ReceiveWMSScanItemListResponse createReceiveWMSScanItemListResponse() {
+        return new ReceiveWMSScanItemListResponse();
+    }
+
+    /**
+     * Create an instance of {@link WSResponse }
+     *
+     */
+    public WSResponse createWSResponse() {
+        return new WSResponse();
+    }
+
+}
diff --git a/src/main/java/org/jeecg/modules/wms/WMSObjectFactory.java b/src/main/java/org/jeecg/modules/wms/WMSObjectFactory.java
new file mode 100644
index 0000000..b81fd72
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/wms/WMSObjectFactory.java
@@ -0,0 +1,132 @@
+
+package org.jeecg.modules.wms;
+
+import org.jeecg.modules.wms.dto.*;
+import org.jeecg.modules.wms.request.*;
+import org.jeecg.modules.wms.request.WebServiceSendItem;
+
+import javax.xml.bind.annotation.XmlRegistry;
+
+
+/**
+ * This object contains factory methods for each 
+ * Java content interface and Java element interface 
+ * generated in the org.tempuri package. 
+ * <p>An ObjectFactory allows you to programatically 
+ * construct new instances of the Java representation 
+ * for XML content. The Java representation of XML 
+ * content can consist of schema derived interfaces 
+ * and classes representing the binding of schema 
+ * type definitions, element declarations and model 
+ * groups.  Factory methods for each of these are 
+ * provided in this class.
+ * 
+ */
+@XmlRegistry
+public class WMSObjectFactory {
+
+
+    /**
+     * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: org.tempuri
+     * 
+     */
+    public WMSObjectFactory() {
+    }
+
+    /**
+     * Create an instance of {@link ReceiveMESScanItemList }
+     * 
+     */
+    public ReceiveMESScanItemList createReceiveMESScanItemList() {
+        return new ReceiveMESScanItemList();
+    }
+
+    /**
+     * Create an instance of {@link ArrayOfWebServiceSendItem }
+     * 
+     */
+    public ArrayOfWebServiceSendItem createArrayOfWebServiceSendItem() {
+        return new ArrayOfWebServiceSendItem();
+    }
+
+    /**
+     * Create an instance of {@link ReceiveMESScanItemListResponse }
+     * 
+     */
+    public ReceiveMESScanItemListResponse createReceiveMESScanItemListResponse() {
+        return new ReceiveMESScanItemListResponse();
+    }
+
+    /**
+     * Create an instance of {@link WSResponse }
+     * 
+     */
+    public WSResponse createWSResponse() {
+        return new WSResponse();
+    }
+
+    /**
+     * Create an instance of {@link DeliOrderDelete }
+     * 
+     */
+    public DeliOrderDelete createDeliOrderDelete() {
+        return new DeliOrderDelete();
+    }
+
+    /**
+     * Create an instance of {@link DeliOrderDeleteResponse }
+     * 
+     */
+    public DeliOrderDeleteResponse createDeliOrderDeleteResponse() {
+        return new DeliOrderDeleteResponse();
+    }
+
+    /**
+     * Create an instance of {@link ReceiveReservation }
+     * 
+     */
+    public ReceiveReservation createReceiveReservation() {
+        return new ReceiveReservation();
+    }
+
+    /**
+     * Create an instance of {@link WebReservationOrder }
+     * 
+     */
+    public WebReservationOrder createWebReservationOrder() {
+        return new WebReservationOrder();
+    }
+
+    /**
+     * Create an instance of {@link ReceiveReservationResponse }
+     * 
+     */
+    public ReceiveReservationResponse createReceiveReservationResponse() {
+        return new ReceiveReservationResponse();
+    }
+
+    /**
+     * Create an instance of {@link HelloWorld }
+     * 
+     */
+    public HelloWorld createHelloWorld() {
+        return new HelloWorld();
+    }
+
+    /**
+     * Create an instance of {@link HelloWorldResponse }
+     * 
+     */
+    public HelloWorldResponse createHelloWorldResponse() {
+        return new HelloWorldResponse();
+    }
+
+    /**
+     * Create an instance of {@link WebServiceSendItem }
+     * 
+     */
+    public WebServiceSendItem createWebServiceSendItem() {
+        return new WebServiceSendItem();
+    }
+
+}
diff --git a/src/main/java/org/jeecg/modules/wms/WMSWebService.java b/src/main/java/org/jeecg/modules/wms/WMSWebService.java
new file mode 100644
index 0000000..bc9d3f2
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/wms/WMSWebService.java
@@ -0,0 +1,114 @@
+package org.jeecg.modules.wms;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import javax.xml.namespace.QName;
+import javax.xml.ws.WebEndpoint;
+import javax.xml.ws.WebServiceClient;
+import javax.xml.ws.WebServiceFeature;
+import javax.xml.ws.Service;
+import org.jeecg.modules.wms.service.WebServiceSoap;
+import org.springframework.stereotype.Component;
+
+/**
+ * This class was generated by Apache CXF 3.5.5
+ * 2025-08-15T16:30:13.500+08:00
+ * Generated source version: 3.5.5
+ *
+ */
+@Component
+@WebServiceClient(name = "WebService",
+                  wsdlLocation = "classpath:/wsdl/WebService.asmx.wsdl",
+                  targetNamespace = "http://tempuri.org/")
+public class WMSWebService extends Service {
+
+    public final static URL WSDL_LOCATION;
+
+    public final static QName SERVICE = new QName("http://tempuri.org/", "WebService");
+    public final static QName WebServiceSoap = new QName("http://tempuri.org/", "WebServiceSoap");
+    public final static QName WebServiceSoap12 = new QName("http://tempuri.org/", "WebServiceSoap12");
+    static {
+        URL url = null;
+        try {
+            url = new URL("classpath:/wsdl/WebService.asmx.wsdl");
+        } catch (MalformedURLException e) {
+            java.util.logging.Logger.getLogger(WMSWebService.class.getName())
+                .log(java.util.logging.Level.INFO,
+                     "Can not initialize the default wsdl from {0}", "classpath:/wsdl/WebService.asmx.wsdl");
+        }
+        WSDL_LOCATION = url;
+    }
+
+    public WMSWebService(URL wsdlLocation) {
+        super(wsdlLocation, SERVICE);
+    }
+
+    public WMSWebService(URL wsdlLocation, QName serviceName) {
+        super(wsdlLocation, serviceName);
+    }
+
+    public WMSWebService() {
+        super(WSDL_LOCATION, SERVICE);
+    }
+
+    public WMSWebService(WebServiceFeature ... features) {
+        super(WSDL_LOCATION, SERVICE, features);
+    }
+
+    public WMSWebService(URL wsdlLocation, WebServiceFeature ... features) {
+        super(wsdlLocation, SERVICE, features);
+    }
+
+    public WMSWebService(URL wsdlLocation, QName serviceName, WebServiceFeature ... features) {
+        super(wsdlLocation, serviceName, features);
+    }
+
+
+
+
+    /**
+     *
+     * @return
+     *     returns WebServiceSoap
+     */
+    @WebEndpoint(name = "WebServiceSoap")
+    public WebServiceSoap getWebServiceSoap() {
+        return super.getPort(WebServiceSoap, WebServiceSoap.class);
+    }
+
+    /**
+     *
+     * @param features
+     *     A list of {@link WebServiceFeature} to configure on the proxy.  Supported features not in the <code>features</code> parameter will have their default values.
+     * @return
+     *     returns WebServiceSoap
+     */
+    @WebEndpoint(name = "WebServiceSoap")
+    public WebServiceSoap getWebServiceSoap(WebServiceFeature... features) {
+        return super.getPort(WebServiceSoap, WebServiceSoap.class, features);
+    }
+
+
+    /**
+     *
+     * @return
+     *     returns WebServiceSoap
+     */
+    @WebEndpoint(name = "WebServiceSoap12")
+    public WebServiceSoap getWebServiceSoap12() {
+        return super.getPort(WebServiceSoap12, WebServiceSoap.class);
+    }
+
+    /**
+     *
+     * @param features
+     *     A list of {@link WebServiceFeature} to configure on the proxy.  Supported features not in the <code>features</code> parameter will have their default values.
+     * @return
+     *     returns WebServiceSoap
+     */
+    @WebEndpoint(name = "WebServiceSoap12")
+    public WebServiceSoap getWebServiceSoap12(WebServiceFeature... features) {
+        return super.getPort(WebServiceSoap12, WebServiceSoap.class, features);
+    }
+
+}
diff --git a/src/main/java/org/jeecg/modules/wms/config/WebServiceServerConfig.java b/src/main/java/org/jeecg/modules/wms/config/WebServiceServerConfig.java
index 17ee53b..bc5f335 100644
--- a/src/main/java/org/jeecg/modules/wms/config/WebServiceServerConfig.java
+++ b/src/main/java/org/jeecg/modules/wms/config/WebServiceServerConfig.java
@@ -4,8 +4,8 @@
 import org.apache.cxf.bus.spring.SpringBus;
 import org.apache.cxf.jaxws.EndpointImpl;
 import org.apache.cxf.transport.servlet.CXFServlet;
-import org.jeecg.modules.wms.service.ReceiveWMSScanItemListService;
-import org.jeecg.modules.wms.service.impl.ReceiveWMSScanItemListServiceImpl;
+import org.jeecg.modules.wms.service.MESWebServiceSoap;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.web.servlet.ServletRegistrationBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -15,6 +15,8 @@
 
 @Configuration
 public class WebServiceServerConfig {
+    @Autowired
+    private MESWebServiceSoap webServiceSoap;
 
     @Bean(name = Bus.DEFAULT_BUS_ID)
     public Bus springBus() {
@@ -27,16 +29,11 @@
     }
 
     @Bean
-    public ReceiveWMSScanItemListService receiveWMSScanItemListService() {
-        return new ReceiveWMSScanItemListServiceImpl();
-    }
-
-    @Bean
     public Endpoint endpoint() {
         // 鍙傛暟浜岋紝鏄疭EI瀹炵幇绫诲璞�
-        Endpoint endpoint = new EndpointImpl(this.springBus(), this.receiveWMSScanItemListService());
+        Endpoint endpoint = new EndpointImpl(this.springBus(), webServiceSoap);
         // 鍙戝竷鏈嶅姟
-        endpoint.publish("/ReceiveWMSScanItemList");
+        endpoint.publish("/MESWebService");
         return endpoint;
     }
 }
diff --git a/src/main/java/org/jeecg/modules/wms/controller/WMSTestController.java b/src/main/java/org/jeecg/modules/wms/controller/WMSTestController.java
index 5aa73af..08d60e0 100644
--- a/src/main/java/org/jeecg/modules/wms/controller/WMSTestController.java
+++ b/src/main/java/org/jeecg/modules/wms/controller/WMSTestController.java
@@ -3,12 +3,18 @@
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.cxf.endpoint.Client;
+import org.apache.cxf.frontend.ClientProxy;
 import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
+import org.apache.cxf.transport.http.HTTPConduit;
+import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
 import org.jeecg.common.api.vo.Result;
-import org.jeecg.modules.wms.dto.ReceiveMESScanItemListResponse;
-import org.jeecg.modules.wms.request.ReceiveMESScanItemList;
-import org.jeecg.modules.wms.service.ReceiveWMSScanItemListService;
-import org.jeecg.modules.wms.service.WMSWebService;
+import org.jeecg.modules.wms.WMSWebService;
+import org.jeecg.modules.wms.dto.WSResponse;
+import org.jeecg.modules.wms.request.ReceiveWMSScanItemList;
+import org.jeecg.modules.wms.service.MESWebServiceSoap;
+import org.jeecg.modules.wms.service.WebServiceSoap;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -21,27 +27,47 @@
 public class WMSTestController {
     @Value("${webservice.url}")
     private String url;
+    @Autowired
+    private WMSWebService webService;
+
+    private final static String localUrl = "http://localhost:9989/jeecg-boot/webservice/ReceiveWMSScanItemList?wsdl";
+
 
     @ApiOperation(value = "WMS闆嗘垚娴嬭瘯-鎺ユ敹WMS绉诲簱缁撴灉", notes = "WMS闆嗘垚娴嬭瘯-鎺ユ敹WMS绉诲簱缁撴灉")
     @PostMapping("/testReceiveWMSScanItemList")
     public Result<?> testReceiveWMSScanItemList() {
         JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
-        factory.setAddress(url);
-        factory.setServiceClass(ReceiveWMSScanItemListService.class);
-        ReceiveWMSScanItemListService service = (ReceiveWMSScanItemListService) factory.create();
-        ReceiveMESScanItemList request = new ReceiveMESScanItemList();
-        ReceiveMESScanItemListResponse response = service.receiveWMSScanItemList(request);
+        factory.setAddress(localUrl);
+        factory.setServiceClass(MESWebServiceSoap.class);
+        MESWebServiceSoap service = (MESWebServiceSoap) factory.create();
+        ReceiveWMSScanItemList request = new ReceiveWMSScanItemList();
+        WSResponse response = service.receiveWMSScanItemList(request);
         return Result.ok(response);
     }
 
     @ApiOperation(value = "WMS闆嗘垚娴嬭瘯-HelloWord娴嬭瘯", notes = "WMS闆嗘垚娴嬭瘯-HelloWord娴嬭瘯")
     @PostMapping("/testHelloWorld")
     public Result<?> testHelloWorld() {
-        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
-        factory.setAddress(url);
-        factory.setServiceClass(WMSWebService.class);
-        WMSWebService service = (WMSWebService) factory.create();
-        String response = service.helloWorld();
-        return Result.ok(response);
+//        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
+//        factory.setAddress(url);
+//        factory.setServiceClass(WebServiceSoap.class);
+//        WebServiceSoap service = (WebServiceSoap) factory.create();
+//        String response = service.helloWorld();
+//        return Result.ok(response);
+        WebServiceSoap port = webService.getWebServiceSoap12();
+        // 2. 鑾峰彇 CXF 搴曞眰 Client 瀵硅薄
+        Client client = ClientProxy.getClient(port);
+
+        // 3. 鑾峰彇 HTTPConduit 骞惰缃秴鏃�
+        HTTPConduit http = (HTTPConduit) client.getConduit();
+        HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
+
+        httpClientPolicy.setConnectionTimeout(10 * 1000); // 杩炴帴瓒呮椂 10 绉�
+        httpClientPolicy.setReceiveTimeout(300 * 1000);   // 璇诲彇瓒呮椂 60 绉掞紙閲嶇偣锛侊級
+
+        http.setClient(httpClientPolicy);
+        String result = port.helloWorld();
+        return Result.ok(result);
+
     }
 }
diff --git a/src/main/java/org/jeecg/modules/wms/dto/DeliOrderDeleteResponse.java b/src/main/java/org/jeecg/modules/wms/dto/DeliOrderDeleteResponse.java
new file mode 100644
index 0000000..aed7d00
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/wms/dto/DeliOrderDeleteResponse.java
@@ -0,0 +1,44 @@
+
+package org.jeecg.modules.wms.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>anonymous complex type鐨� Java 绫汇��
+ * 
+ * <p>浠ヤ笅妯″紡鐗囨鎸囧畾鍖呭惈鍦ㄦ绫讳腑鐨勯鏈熷唴瀹广��
+ * 
+ * <pre>
+ * &lt;complexType&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="DeliOrderDeleteResult" type="{http://tempuri.org/}WSResponse" minOccurs="0"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {
+    "deliOrderDeleteResult"
+})
+@XmlRootElement(name = "DeliOrderDeleteResponse")
+@Getter
+@Setter
+public class DeliOrderDeleteResponse {
+
+    @XmlElement(name = "DeliOrderDeleteResult")
+    protected WSResponse deliOrderDeleteResult;
+}
diff --git a/src/main/java/org/jeecg/modules/wms/dto/HelloWorldResponse.java b/src/main/java/org/jeecg/modules/wms/dto/HelloWorldResponse.java
new file mode 100644
index 0000000..c7dc781
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/wms/dto/HelloWorldResponse.java
@@ -0,0 +1,44 @@
+
+package org.jeecg.modules.wms.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>anonymous complex type鐨� Java 绫汇��
+ *
+ * <p>浠ヤ笅妯″紡鐗囨鎸囧畾鍖呭惈鍦ㄦ绫讳腑鐨勯鏈熷唴瀹广��
+ *
+ * <pre>
+ * &lt;complexType&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="HelloWorldResult" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {
+        "helloWorldResult"
+})
+@XmlRootElement(name = "HelloWorldResponse")
+@Getter
+@Setter
+public class HelloWorldResponse {
+
+    @XmlElement(name = "HelloWorldResult")
+    protected String helloWorldResult;
+}
diff --git a/src/main/java/org/jeecg/modules/wms/dto/ReceiveMESScanItemListResponse.java b/src/main/java/org/jeecg/modules/wms/dto/ReceiveMESScanItemListResponse.java
index 99d4316..5a91a63 100644
--- a/src/main/java/org/jeecg/modules/wms/dto/ReceiveMESScanItemListResponse.java
+++ b/src/main/java/org/jeecg/modules/wms/dto/ReceiveMESScanItemListResponse.java
@@ -1,19 +1,40 @@
+
 package org.jeecg.modules.wms.dto;
 
 import lombok.Getter;
 import lombok.Setter;
 
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import java.io.Serializable;
+import javax.xml.bind.annotation.*;
 
+
+/**
+ * <p>anonymous complex type鐨� Java 绫汇��
+ *
+ * <p>浠ヤ笅妯″紡鐗囨鎸囧畾鍖呭惈鍦ㄦ绫讳腑鐨勯鏈熷唴瀹广��
+ *
+ * <pre>
+ * &lt;complexType&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="ReceiveMESScanItemListResult" type="{http://tempuri.org/}WSResponse" minOccurs="0"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {
+        "receiveMESScanItemListResult"
+})
+@XmlRootElement(name = "ReceiveMESScanItemListResponse")
 @Getter
 @Setter
-@XmlRootElement(name = "ReceiveMESScanItemListResponse")
-@XmlAccessorType(XmlAccessType.FIELD)
-public class ReceiveMESScanItemListResponse implements Serializable {
-    @XmlElement(name = "WSResponse")
-    private WSResponse wsResponse;
+public class ReceiveMESScanItemListResponse {
+
+    @XmlElement(name = "ReceiveMESScanItemListResult")
+    protected WSResponse receiveMESScanItemListResult;
 }
diff --git a/src/main/java/org/jeecg/modules/wms/dto/ReceiveReservationResponse.java b/src/main/java/org/jeecg/modules/wms/dto/ReceiveReservationResponse.java
new file mode 100644
index 0000000..1a6c8d1
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/wms/dto/ReceiveReservationResponse.java
@@ -0,0 +1,40 @@
+
+package org.jeecg.modules.wms.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.xml.bind.annotation.*;
+
+
+/**
+ * <p>anonymous complex type鐨� Java 绫汇��
+ *
+ * <p>浠ヤ笅妯″紡鐗囨鎸囧畾鍖呭惈鍦ㄦ绫讳腑鐨勯鏈熷唴瀹广��
+ *
+ * <pre>
+ * &lt;complexType&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="ReceiveReservationResult" type="{http://tempuri.org/}WSResponse" minOccurs="0"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {
+        "receiveReservationResult"
+})
+@XmlRootElement(name = "ReceiveReservationResponse")
+@Getter
+@Setter
+public class ReceiveReservationResponse {
+
+    @XmlElement(name = "ReceiveReservationResult")
+    protected WSResponse receiveReservationResult;
+}
diff --git a/src/main/java/org/jeecg/modules/wms/dto/ReceiveWMSScanItemListResponse.java b/src/main/java/org/jeecg/modules/wms/dto/ReceiveWMSScanItemListResponse.java
new file mode 100644
index 0000000..f2da1d4
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/wms/dto/ReceiveWMSScanItemListResponse.java
@@ -0,0 +1,18 @@
+package org.jeecg.modules.wms.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.xml.bind.annotation.*;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {
+        "receiveWMSScanItemListResult"
+})
+@XmlRootElement(name = "ReceiveWMSScanItemListResponse")
+@Getter
+@Setter
+public class ReceiveWMSScanItemListResponse {
+    @XmlElement(name = "ReceiveWMSScanItemListResult")
+    protected WSResponse receiveWMSScanItemListResult;
+}
diff --git a/src/main/java/org/jeecg/modules/wms/dto/WSResponse.java b/src/main/java/org/jeecg/modules/wms/dto/WSResponse.java
index 2c1669a..0d55fcf 100644
--- a/src/main/java/org/jeecg/modules/wms/dto/WSResponse.java
+++ b/src/main/java/org/jeecg/modules/wms/dto/WSResponse.java
@@ -1,3 +1,4 @@
+
 package org.jeecg.modules.wms.dto;
 
 import lombok.Getter;
@@ -6,14 +7,40 @@
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
-import java.io.Serializable;
+import javax.xml.bind.annotation.XmlType;
 
+
+/**
+ * <p>WSResponse complex type鐨� Java 绫汇��
+ *
+ * <p>浠ヤ笅妯″紡鐗囨鎸囧畾鍖呭惈鍦ㄦ绫讳腑鐨勯鏈熷唴瀹广��
+ *
+ * <pre>
+ * &lt;complexType name="WSResponse"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="ErrorCode" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
+ *         &lt;element name="ErrorDesc" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ *
+ *
+ */
 @Getter
 @Setter
 @XmlAccessorType(XmlAccessType.FIELD)
-public class WSResponse implements Serializable {
+@XmlType(name = "WSResponse", propOrder = {
+        "errorCode",
+        "errorDesc"
+})
+public class WSResponse {
+
     @XmlElement(name = "ErrorCode")
-    private String errorCode;
+    protected String errorCode;
     @XmlElement(name = "ErrorDesc")
-    private String errorDesc;
+    protected String errorDesc;
 }
diff --git a/src/main/java/org/jeecg/modules/wms/request/ArrayOfWebServiceSendItem.java b/src/main/java/org/jeecg/modules/wms/request/ArrayOfWebServiceSendItem.java
new file mode 100644
index 0000000..98f4d53
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/wms/request/ArrayOfWebServiceSendItem.java
@@ -0,0 +1,69 @@
+
+package org.jeecg.modules.wms.request;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * <p>ArrayOfWebServiceSendItem complex type鐨� Java 绫汇��
+ *
+ * <p>浠ヤ笅妯″紡鐗囨鎸囧畾鍖呭惈鍦ㄦ绫讳腑鐨勯鏈熷唴瀹广��
+ *
+ * <pre>
+ * &lt;complexType name="ArrayOfWebServiceSendItem"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="WebServiceSendItem" type="{http://tempuri.org/}WebServiceSendItem" maxOccurs="unbounded" minOccurs="0"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ArrayOfWebServiceSendItem", propOrder = {
+        "webServiceSendItem"
+})
+public class ArrayOfWebServiceSendItem {
+
+    @XmlElement(name = "WebServiceSendItem", nillable = true)
+    protected List<WebServiceSendItem> webServiceSendItem;
+
+    /**
+     * Gets the value of the webServiceSendItem property.
+     *
+     * <p>
+     * This accessor method returns a reference to the live list,
+     * not a snapshot. Therefore any modification you make to the
+     * returned list will be present inside the JAXB object.
+     * This is why there is not a <CODE>set</CODE> method for the webServiceSendItem property.
+     *
+     * <p>
+     * For example, to add a new item, do as follows:
+     * <pre>
+     *    getWebServiceSendItem().add(newItem);
+     * </pre>
+     *
+     *
+     * <p>
+     * Objects of the following type(s) are allowed in the list
+     * {@link WebServiceSendItem }
+     *
+     *
+     */
+    public List<WebServiceSendItem> getWebServiceSendItem() {
+        if (webServiceSendItem == null) {
+            webServiceSendItem = new ArrayList<>();
+        }
+        return this.webServiceSendItem;
+    }
+
+}
diff --git a/src/main/java/org/jeecg/modules/wms/request/DeliOrderDelete.java b/src/main/java/org/jeecg/modules/wms/request/DeliOrderDelete.java
new file mode 100644
index 0000000..d30d35a
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/wms/request/DeliOrderDelete.java
@@ -0,0 +1,45 @@
+
+package org.jeecg.modules.wms.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>anonymous complex type鐨� Java 绫汇��
+ *
+ * <p>浠ヤ笅妯″紡鐗囨鎸囧畾鍖呭惈鍦ㄦ绫讳腑鐨勯鏈熷唴瀹广��
+ *
+ * <pre>
+ * &lt;complexType&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="sFactoryCode" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
+ *         &lt;element name="sStockRecord" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {
+        "sFactoryCode",
+        "sStockRecord"
+})
+@XmlRootElement(name = "DeliOrderDelete")
+@Getter
+@Setter
+public class DeliOrderDelete {
+
+    protected String sFactoryCode;
+    protected String sStockRecord;
+}
diff --git a/src/main/java/org/jeecg/modules/wms/request/HelloWorld.java b/src/main/java/org/jeecg/modules/wms/request/HelloWorld.java
new file mode 100644
index 0000000..c7e8e1a
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/wms/request/HelloWorld.java
@@ -0,0 +1,32 @@
+
+package org.jeecg.modules.wms.request;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>anonymous complex type鐨� Java 绫汇��
+ * 
+ * <p>浠ヤ笅妯″紡鐗囨鎸囧畾鍖呭惈鍦ㄦ绫讳腑鐨勯鏈熷唴瀹广��
+ * 
+ * <pre>
+ * &lt;complexType&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "")
+@XmlRootElement(name = "HelloWorld")
+public class HelloWorld {
+
+
+}
diff --git a/src/main/java/org/jeecg/modules/wms/request/ReceiveMESScanItemList.java b/src/main/java/org/jeecg/modules/wms/request/ReceiveMESScanItemList.java
index 9bb906b..8977c4b 100644
--- a/src/main/java/org/jeecg/modules/wms/request/ReceiveMESScanItemList.java
+++ b/src/main/java/org/jeecg/modules/wms/request/ReceiveMESScanItemList.java
@@ -1,19 +1,40 @@
+
 package org.jeecg.modules.wms.request;
 
 import lombok.Getter;
 import lombok.Setter;
 
 import javax.xml.bind.annotation.*;
-import java.io.Serializable;
-import java.util.List;
 
+
+/**
+ * <p>anonymous complex type鐨� Java 绫汇��
+ *
+ * <p>浠ヤ笅妯″紡鐗囨鎸囧畾鍖呭惈鍦ㄦ绫讳腑鐨勯鏈熷唴瀹广��
+ *
+ * <pre>
+ * &lt;complexType&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="oMESScanItemList" type="{http://tempuri.org/}ArrayOfWebServiceSendItem" minOccurs="0"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {
+        "omesScanItemList"
+})
+@XmlRootElement(name = "ReceiveMESScanItemList")
 @Getter
 @Setter
-@XmlRootElement(name = "ReceiveMESScanItemList")
-@XmlAccessorType(XmlAccessType.FIELD)
-public class ReceiveMESScanItemList implements Serializable {
+public class ReceiveMESScanItemList {
 
-    @XmlElementWrapper(name = "ArrayOfWebServiceSendItem")
-    @XmlElement(name = "WebServiceSendItem")
-    private List<WebServiceSendItem> items;
+    @XmlElement(name = "oMESScanItemList")
+    protected ArrayOfWebServiceSendItem omesScanItemList;
 }
diff --git a/src/main/java/org/jeecg/modules/wms/request/ReceiveReservation.java b/src/main/java/org/jeecg/modules/wms/request/ReceiveReservation.java
new file mode 100644
index 0000000..d38ae84
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/wms/request/ReceiveReservation.java
@@ -0,0 +1,42 @@
+
+package org.jeecg.modules.wms.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>anonymous complex type鐨� Java 绫汇��
+ *
+ * <p>浠ヤ笅妯″紡鐗囨鎸囧畾鍖呭惈鍦ㄦ绫讳腑鐨勯鏈熷唴瀹广��
+ *
+ * <pre>
+ * &lt;complexType&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="oWebReservationOrder" type="{http://tempuri.org/}WebReservationOrder" minOccurs="0"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {
+        "oWebReservationOrder"
+})
+@XmlRootElement(name = "ReceiveReservation")
+@Getter
+@Setter
+public class ReceiveReservation {
+
+    protected WebReservationOrder oWebReservationOrder;
+}
diff --git a/src/main/java/org/jeecg/modules/wms/request/ReceiveWMSScanItemList.java b/src/main/java/org/jeecg/modules/wms/request/ReceiveWMSScanItemList.java
new file mode 100644
index 0000000..1ccdc62
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/wms/request/ReceiveWMSScanItemList.java
@@ -0,0 +1,21 @@
+package org.jeecg.modules.wms.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.xml.bind.annotation.*;
+import java.util.List;
+
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "", propOrder = {
+        "wmsWebServiceSendItemList"
+})
+@XmlRootElement(name = "ReceiveWMSScanItemList")
+@Getter
+@Setter
+public class ReceiveWMSScanItemList {
+
+    @XmlElementWrapper(name = "ArrayOfWMSWebServiceSendItem")
+    @XmlElement(name = "WMSWebServiceSendItem", nillable = true)
+    protected List<WMSWebServiceSendItem> wmsWebServiceSendItemList;
+}
diff --git a/src/main/java/org/jeecg/modules/wms/request/WMSWebServiceSendItem.java b/src/main/java/org/jeecg/modules/wms/request/WMSWebServiceSendItem.java
new file mode 100644
index 0000000..0e491a8
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/wms/request/WMSWebServiceSendItem.java
@@ -0,0 +1,91 @@
+
+package org.jeecg.modules.wms.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+@Getter
+@Setter
+@XmlType(name = "WMSWebServiceSendItem", propOrder = {
+        "factoryCode",
+        "skuCode",
+        "reservationOrder",
+        "align",
+        "pallet",
+        "packageNo",
+        "trackLot",
+        "series",
+        "mesStockID",
+        "quantity",
+        "sapTrackLot",
+        "section",
+        "destSection",
+        "supplierCode",
+        "supplierTrackLot",
+        "stageID",
+        "remark",
+        "orderCode"
+})
+@XmlAccessorType(XmlAccessType.FIELD)
+public class WMSWebServiceSendItem {
+
+    /**宸ュ巶缂栫爜 */
+    @XmlElement(name = "FactoryCode")
+    private String factoryCode;
+    /** 鐗╂枡缂栫爜 */
+    @XmlElement(name = "SkuCode")
+    private String skuCode;
+    /** 棰勭暀鍙� */
+    @XmlElement(name = "ReservationOrder")
+    private String reservationOrder;
+    /** 瀵归綈鏂瑰紡 */
+    @XmlElement(name = "Align")
+    private String align;
+    /** 鎵樺彿 */
+    @XmlElement(name = "Pallet")
+    private String pallet;
+    /** 鍖呰缂栫爜 */
+    @XmlElement(name = "PackageNo")
+    private String packageNo;
+    /** 鎵规鍙� */
+    @XmlElement(name = "TrackLot")
+    private String trackLot;
+    /** 绯诲垪鍙� */
+    @XmlElement(name = "Series")
+    private String series;
+    /** MES搴撳瓨ID */
+    @XmlElement(name = "MesStockID")
+    private String mesStockID;
+    /** 鏁伴噺 */
+    @XmlElement(name = "Quantity")
+    private String quantity;
+    /** SAP鎵规鍙� */
+    @XmlElement(name = "SapTrackLot")
+    private String sapTrackLot;
+    /** 鍙戦�佸簱瀛樺湴 */
+    @XmlElement(name = "Section")
+    private String section;
+    /** 鐩爣搴撳瓨鍦� */
+    @XmlElement(name = "DestSection")
+    private String destSection;
+    /** 渚涘簲鍟嗕唬鐮� */
+    @XmlElement(name = "SupplierCode")
+    private String supplierCode;
+    /** 渚涘簲鍟嗘壒娆″彿 */
+    @XmlElement(name = "SupplierTrackLot")
+    private String supplierTrackLot;
+    /** 闃舵ID */
+    @XmlElement(name = "StageID")
+    private String stageID;
+    /** 澶囨敞 */
+    @XmlElement(name = "Remark")
+    private String remark;
+    /** 璁㈠崟缂栫爜 */
+    @XmlElement(name = "OrderCode")
+    private String orderCode;
+}
diff --git a/src/main/java/org/jeecg/modules/wms/request/WebReservationOrder.java b/src/main/java/org/jeecg/modules/wms/request/WebReservationOrder.java
new file mode 100644
index 0000000..2f962be
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/wms/request/WebReservationOrder.java
@@ -0,0 +1,51 @@
+
+package org.jeecg.modules.wms.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+import java.math.BigDecimal;
+
+
+/**
+ * <p>WebReservationOrder complex type鐨� Java 绫汇��
+ * 
+ * <p>浠ヤ笅妯″紡鐗囨鎸囧畾鍖呭惈鍦ㄦ绫讳腑鐨勯鏈熷唴瀹广��
+ * 
+ * <pre>
+ * &lt;complexType name="WebReservationOrder"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="FactoryCode" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
+ *         &lt;element name="ReservationOrder" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
+ *         &lt;element name="Total" type="{http://www.w3.org/2001/XMLSchema}decimal"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "WebReservationOrder", propOrder = {
+    "factoryCode",
+    "reservationOrder",
+    "total"
+})
+@Getter
+@Setter
+public class WebReservationOrder {
+
+    @XmlElement(name = "FactoryCode")
+    protected String factoryCode;
+    @XmlElement(name = "ReservationOrder")
+    protected String reservationOrder;
+    @XmlElement(name = "Total", required = true)
+    protected BigDecimal total;
+}
diff --git a/src/main/java/org/jeecg/modules/wms/request/WebServiceSendItem.java b/src/main/java/org/jeecg/modules/wms/request/WebServiceSendItem.java
index d87832f..ab7e44e 100644
--- a/src/main/java/org/jeecg/modules/wms/request/WebServiceSendItem.java
+++ b/src/main/java/org/jeecg/modules/wms/request/WebServiceSendItem.java
@@ -1,70 +1,107 @@
+
 package org.jeecg.modules.wms.request;
 
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
-import java.io.Serializable;
-import java.math.BigDecimal;
+import javax.xml.bind.annotation.XmlType;
 
+
+/**
+ * <p>WebServiceSendItem complex type鐨� Java 绫汇��
+ * 
+ * <p>浠ヤ笅妯″紡鐗囨鎸囧畾鍖呭惈鍦ㄦ绫讳腑鐨勯鏈熷唴瀹广��
+ * 
+ * <pre>
+ * &lt;complexType name="WebServiceSendItem"&gt;
+ *   &lt;complexContent&gt;
+ *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;
+ *       &lt;sequence&gt;
+ *         &lt;element name="FactoryCode" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
+ *         &lt;element name="SkuCode" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
+ *         &lt;element name="Align" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
+ *         &lt;element name="Pallet" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
+ *         &lt;element name="PackageNo" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
+ *         &lt;element name="TrackLot" type="{http://www.w3.org/2001/XMLSchema}long"/&gt;
+ *         &lt;element name="Series" type="{http://www.w3.org/2001/XMLSchema}long"/&gt;
+ *         &lt;element name="MesStockID" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
+ *         &lt;element name="Quantity" type="{http://www.w3.org/2001/XMLSchema}decimal"/&gt;
+ *         &lt;element name="SapTrackLot" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
+ *         &lt;element name="Section" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
+ *         &lt;element name="DestSection" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
+ *         &lt;element name="SupplierCode" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
+ *         &lt;element name="SupplierTrackLot" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
+ *         &lt;element name="StageID" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
+ *         &lt;element name="Remark" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
+ *         &lt;element name="OrderCode" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/&gt;
+ *       &lt;/sequence&gt;
+ *     &lt;/restriction&gt;
+ *   &lt;/complexContent&gt;
+ * &lt;/complexType&gt;
+ * </pre>
+ * 
+ * 
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "WebServiceSendItem", propOrder = {
+    "factoryCode",
+    "skuCode",
+    "align",
+    "pallet",
+    "packageNo",
+    "trackLot",
+    "series",
+    "mesStockID",
+    "quantity",
+    "sapTrackLot",
+    "section",
+    "destSection",
+    "supplierCode",
+    "supplierTrackLot",
+    "stageID",
+    "remark",
+    "orderCode"
+})
 @Getter
 @Setter
-@XmlAccessorType(XmlAccessType.FIELD)
-public class WebServiceSendItem implements Serializable {
-    /**宸ュ巶缂栫爜 */
+public class WebServiceSendItem {
+
     @XmlElement(name = "FactoryCode")
-    private String factoryCode;
-    /** 鐗╂枡缂栫爜 */
+    protected String factoryCode;
     @XmlElement(name = "SkuCode")
-    private String skuCode;
-    /** 棰勭暀鍙� */
-    @XmlElement(name = "ReservationOrder")
-    private String reservationOrder;
-    /** 瀵归綈鏂瑰紡 */
+    protected String skuCode;
     @XmlElement(name = "Align")
-    private String align;
-    /** 鎵樺彿 */
+    protected String align;
     @XmlElement(name = "Pallet")
-    private String pallet;
-    /** 鍖呰缂栫爜 */
+    protected String pallet;
     @XmlElement(name = "PackageNo")
-    private String packageNo;
-    /** 鎵规鍙� */
+    protected String packageNo;
     @XmlElement(name = "TrackLot")
-    private String trackLot;
-    /** 绯诲垪鍙� */
+    protected long trackLot;
     @XmlElement(name = "Series")
-    private String series;
-    /** MES搴撳瓨ID */
+    protected long series;
     @XmlElement(name = "MesStockID")
-    private String mesStockID;
-    /** 鏁伴噺 */
-    @XmlElement(name = "Quantity")
-    private BigDecimal quantity;
-    /** SAP鎵规鍙� */
+    protected String mesStockID;
+    @XmlElement(name = "Quantity", required = true)
+    protected BigDecimal quantity;
     @XmlElement(name = "SapTrackLot")
-    private String sapTrackLot;
-    /** 鍙戦�佸簱瀛樺湴 */
+    protected String sapTrackLot;
     @XmlElement(name = "Section")
-    private String section;
-    /** 鐩爣搴撳瓨鍦� */
+    protected String section;
     @XmlElement(name = "DestSection")
-    private String destSection;
-    /** 渚涘簲鍟嗕唬鐮� */
+    protected String destSection;
     @XmlElement(name = "SupplierCode")
-    private String supplierCode;
-    /** 渚涘簲鍟嗘壒娆″彿 */
+    protected String supplierCode;
     @XmlElement(name = "SupplierTrackLot")
-    private String supplierTrackLot;
-    /** 闃舵ID */
+    protected String supplierTrackLot;
     @XmlElement(name = "StageID")
-    private String stageID;
-    /** 澶囨敞 */
+    protected String stageID;
     @XmlElement(name = "Remark")
-    private String remark;
-    /** 璁㈠崟缂栫爜 */
+    protected String remark;
     @XmlElement(name = "OrderCode")
-    private String orderCode;
+    protected String orderCode;
 }
diff --git a/src/main/java/org/jeecg/modules/wms/service/MESWebServiceSoap.java b/src/main/java/org/jeecg/modules/wms/service/MESWebServiceSoap.java
new file mode 100644
index 0000000..80bbc38
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/wms/service/MESWebServiceSoap.java
@@ -0,0 +1,28 @@
+package org.jeecg.modules.wms.service;
+
+import org.jeecg.modules.wms.MESObjectFactory;
+import org.jeecg.modules.wms.dto.WSResponse;
+import org.jeecg.modules.wms.request.ReceiveWMSScanItemList;
+
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebResult;
+import javax.jws.WebService;
+import javax.xml.bind.annotation.XmlSeeAlso;
+import javax.xml.ws.RequestWrapper;
+import javax.xml.ws.ResponseWrapper;
+
+@WebService(name = "MESWebServiceSoap", targetNamespace = "http://xhj008.server.webservice.com/")
+@XmlSeeAlso({MESObjectFactory.class})
+public interface MESWebServiceSoap {
+    /**
+     * 鎺ユ敹WMS绉诲簱淇℃伅
+     * @param request
+     * @return
+     */
+    @WebMethod(operationName = "ReceiveWMSScanItemList", action = "http://xhj008.server.webservice.com/ReceiveWMSScanItemList")
+    @RequestWrapper(localName = "ReceiveWMSScanItemList", targetNamespace = "http://xhj008.server.webservice.com/", className = "ReceiveWMSScanItemList")
+    @ResponseWrapper(localName = "ReceiveWMSScanItemListResponse", targetNamespace = "http://xhj008.server.webservice.com/", className = "ReceiveWMSScanItemListResponse")
+    @WebResult(name = "ReceiveWMSScanItemListResult", targetNamespace = "http://xhj008.server.webservice.com/")
+    WSResponse receiveWMSScanItemList(@WebParam(name = "ReceiveWMSScanItemList", targetNamespace = "http://xhj008.server.webservice.com/") ReceiveWMSScanItemList request);
+}
diff --git a/src/main/java/org/jeecg/modules/wms/service/ReceiveWMSScanItemListService.java b/src/main/java/org/jeecg/modules/wms/service/ReceiveWMSScanItemListService.java
deleted file mode 100644
index d5f1b93..0000000
--- a/src/main/java/org/jeecg/modules/wms/service/ReceiveWMSScanItemListService.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.jeecg.modules.wms.service;
-
-import org.jeecg.modules.wms.dto.ReceiveMESScanItemListResponse;
-import org.jeecg.modules.wms.request.ReceiveMESScanItemList;
-
-import javax.jws.WebService;
-
-@WebService(name = "ReceiveWMSScanItemList", targetNamespace = "http://xhj008.server.webservice.com")
-public interface ReceiveWMSScanItemListService {
-    /**
-     * 鎺ユ敹WMS绉诲簱淇℃伅
-     * @param request
-     * @return
-     */
-    ReceiveMESScanItemListResponse receiveWMSScanItemList(ReceiveMESScanItemList request);
-}
diff --git a/src/main/java/org/jeecg/modules/wms/service/WMSWebService.java b/src/main/java/org/jeecg/modules/wms/service/WMSWebService.java
deleted file mode 100644
index 0d1ee5d..0000000
--- a/src/main/java/org/jeecg/modules/wms/service/WMSWebService.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.jeecg.modules.wms.service;
-
-import javax.jws.WebMethod;
-import javax.jws.WebResult;
-import javax.jws.WebService;
-
-@WebService(name = "WebService", targetNamespace = "http://tempuri.org")
-public interface WMSWebService {
-
-    @WebMethod(operationName = "HelloWorld")
-    @WebResult(name = "HelloWorldResponse")
-    String helloWorld();
-}
diff --git a/src/main/java/org/jeecg/modules/wms/service/WebServiceSoap.java b/src/main/java/org/jeecg/modules/wms/service/WebServiceSoap.java
new file mode 100644
index 0000000..84aba91
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/wms/service/WebServiceSoap.java
@@ -0,0 +1,63 @@
+package org.jeecg.modules.wms.service;
+
+import org.jeecg.modules.wms.WMSObjectFactory;
+import org.jeecg.modules.wms.dto.WSResponse;
+import org.jeecg.modules.wms.request.ArrayOfWebServiceSendItem;
+import org.jeecg.modules.wms.request.WebReservationOrder;
+
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebResult;
+import javax.jws.WebService;
+import javax.xml.bind.annotation.XmlSeeAlso;
+import javax.xml.ws.RequestWrapper;
+import javax.xml.ws.ResponseWrapper;
+
+/**
+ * This class was generated by Apache CXF 3.5.5
+ * 2025-08-15T16:30:13.468+08:00
+ * Generated source version: 3.5.5
+ *
+ */
+@WebService(targetNamespace = "http://tempuri.org/", name = "WebServiceSoap")
+@XmlSeeAlso({WMSObjectFactory.class})
+public interface WebServiceSoap {
+
+    @WebMethod(operationName = "ReceiveReservation", action = "http://tempuri.org/ReceiveReservation")
+    @RequestWrapper(localName = "ReceiveReservation", targetNamespace = "http://tempuri.org/", className = "ReceiveReservation")
+    @ResponseWrapper(localName = "ReceiveReservationResponse", targetNamespace = "http://tempuri.org/", className = "ReceiveReservationResponse")
+    @WebResult(name = "ReceiveReservationResult", targetNamespace = "http://tempuri.org/")
+    WSResponse receiveReservation(
+
+            @WebParam(name = "oWebReservationOrder", targetNamespace = "http://tempuri.org/")
+            WebReservationOrder oWebReservationOrder
+    );
+
+    @WebMethod(operationName = "HelloWorld", action = "http://tempuri.org/HelloWorld")
+    @RequestWrapper(localName = "HelloWorld", targetNamespace = "http://tempuri.org/", className = "HelloWorld")
+    @ResponseWrapper(localName = "HelloWorldResponse", targetNamespace = "http://tempuri.org/", className = "HelloWorldResponse")
+    @WebResult(name = "HelloWorldResult", targetNamespace = "http://tempuri.org/")
+    String helloWorld();
+
+    @WebMethod(operationName = "ReceiveMESScanItemList", action = "http://tempuri.org/ReceiveMESScanItemList")
+    @RequestWrapper(localName = "ReceiveMESScanItemList", targetNamespace = "http://tempuri.org/", className = "ReceiveMESScanItemList")
+    @ResponseWrapper(localName = "ReceiveMESScanItemListResponse", targetNamespace = "http://tempuri.org/", className = "ReceiveMESScanItemListResponse")
+    @WebResult(name = "ReceiveMESScanItemListResult", targetNamespace = "http://tempuri.org/")
+    WSResponse receiveMESScanItemList(
+
+            @WebParam(name = "oMESScanItemList", targetNamespace = "http://tempuri.org/")
+            ArrayOfWebServiceSendItem oMESScanItemList
+    );
+
+    @WebMethod(operationName = "DeliOrderDelete", action = "http://tempuri.org/DeliOrderDelete")
+    @RequestWrapper(localName = "DeliOrderDelete", targetNamespace = "http://tempuri.org/", className = "DeliOrderDelete")
+    @ResponseWrapper(localName = "DeliOrderDeleteResponse", targetNamespace = "http://tempuri.org/", className = "DeliOrderDeleteResponse")
+    @WebResult(name = "DeliOrderDeleteResult", targetNamespace = "http://tempuri.org/")
+    WSResponse deliOrderDelete(
+
+            @WebParam(name = "sFactoryCode", targetNamespace = "http://tempuri.org/")
+            String sFactoryCode,
+            @WebParam(name = "sStockRecord", targetNamespace = "http://tempuri.org/")
+            String sStockRecord
+    );
+}
diff --git a/src/main/java/org/jeecg/modules/wms/service/impl/MESWebServiceSoapImpl.java b/src/main/java/org/jeecg/modules/wms/service/impl/MESWebServiceSoapImpl.java
new file mode 100644
index 0000000..b3a7987
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/wms/service/impl/MESWebServiceSoapImpl.java
@@ -0,0 +1,37 @@
+package org.jeecg.modules.wms.service.impl;
+
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.aspect.annotation.ApiLog;
+import org.jeecg.common.constant.ApiLogCategoryEnum;
+import org.jeecg.modules.wms.dto.WSResponse;
+import org.jeecg.modules.wms.request.ReceiveWMSScanItemList;
+import org.jeecg.modules.wms.service.MESWebServiceSoap;
+import org.springframework.stereotype.Service;
+
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebResult;
+import javax.jws.WebService;
+import javax.xml.ws.RequestWrapper;
+import javax.xml.ws.ResponseWrapper;
+
+
+@Slf4j
+@Service
+@WebService(name = "MESWebServiceSoap", targetNamespace = "http://xhj008.server.webservice.com", endpointInterface = "org.jeecg.modules.wms.service.MESWebServiceSoap")
+public class MESWebServiceSoapImpl implements MESWebServiceSoap {
+
+    @Override
+    @WebMethod(operationName = "ReceiveWMSScanItemList", action = "http://xhj008.server.webservice.com/ReceiveWMSScanItemList")
+    @RequestWrapper(localName = "ReceiveWMSScanItemList", targetNamespace = "http://xhj008.server.webservice.com/", className = "ReceiveWMSScanItemList")
+    @ResponseWrapper(localName = "ReceiveWMSScanItemListResponse", targetNamespace = "http://xhj008.server.webservice.com/", className = "ReceiveWMSScanItemListResponse")
+    @WebResult(name = "ReceiveWMSScanItemListResult", targetNamespace = "http://xhj008.server.webservice.com/")
+    @ApiLog(apiName = "鎺ユ敹WMS鐨勭Щ搴撲俊鎭�(ReceiveWMSScanItemList(MES)", apiCategory = ApiLogCategoryEnum.WMS)
+    public WSResponse receiveWMSScanItemList(@WebParam(name = "ReceiveWMSScanItemList", targetNamespace = "http://xhj008.server.webservice.com/") ReceiveWMSScanItemList request) {
+        log.error("11111111111");
+        WSResponse response = new WSResponse();
+        response.setErrorCode("-1");
+        response.setErrorDesc("鎴戞椂缁撴灉闆�");
+        return response;
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/wms/service/impl/ReceiveWMSScanItemListServiceImpl.java b/src/main/java/org/jeecg/modules/wms/service/impl/ReceiveWMSScanItemListServiceImpl.java
deleted file mode 100644
index 12e4d51..0000000
--- a/src/main/java/org/jeecg/modules/wms/service/impl/ReceiveWMSScanItemListServiceImpl.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.jeecg.modules.wms.service.impl;
-
-import lombok.extern.slf4j.Slf4j;
-import org.jeecg.common.aspect.annotation.ApiLog;
-import org.jeecg.common.constant.ApiLogCategoryEnum;
-import org.jeecg.modules.wms.dto.ReceiveMESScanItemListResponse;
-import org.jeecg.modules.wms.request.ReceiveMESScanItemList;
-import org.jeecg.modules.wms.service.ReceiveWMSScanItemListService;
-
-import javax.jws.WebService;
-
-
-@Slf4j
-@WebService(name = "ReceiveWMSScanItemListService",  targetNamespace = "http://xhj008.server.webservice.com", endpointInterface = "org.jeecg.modules.wms.service.ReceiveWMSScanItemListService")
-public class ReceiveWMSScanItemListServiceImpl implements ReceiveWMSScanItemListService {
-
-    @Override
-    @ApiLog(apiName = "鎺ユ敹WMS鐨勭Щ搴撲俊鎭�(ReceiveWMSScanItemList(MES)", apiCategory = ApiLogCategoryEnum.WMS)
-    public ReceiveMESScanItemListResponse receiveWMSScanItemList(ReceiveMESScanItemList request) {
-        return new ReceiveMESScanItemListResponse();
-    }
-}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 84dc636..c83b1ec 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -7,7 +7,7 @@
     include-stacktrace: ALWAYS
     include-message: ALWAYS
   servlet:
-    context-path: /jeecg-boot
+    context-path:
   compression:
     enabled: true
     min-response-size: 1024
@@ -126,7 +126,7 @@
         connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
       datasource:
         master:
-          url: jdbc:sqlserver://192.168.1.118:1433;databasename=LXZN_TEST_XHJ;nullCatalogMeansCurrent=true
+          url: jdbc:sqlserver://192.168.0.118:1433;databasename=LXZN_TEST_XHJ;nullCatalogMeansCurrent=true
           username: sa
           password: 123
           driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
diff --git a/src/main/resources/wsdl/WebService.asmx.wsdl b/src/main/resources/wsdl/WebService.asmx.wsdl
new file mode 100644
index 0000000..2800121
--- /dev/null
+++ b/src/main/resources/wsdl/WebService.asmx.wsdl
@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+  <wsdl:types>
+    <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
+      <s:element name="ReceiveMESScanItemList">
+        <s:complexType>
+          <s:sequence>
+            <s:element minOccurs="0" maxOccurs="1" name="oMESScanItemList" type="tns:ArrayOfWebServiceSendItem" />
+          </s:sequence>
+        </s:complexType>
+      </s:element>
+      <s:complexType name="ArrayOfWebServiceSendItem">
+        <s:sequence>
+          <s:element minOccurs="0" maxOccurs="unbounded" name="WebServiceSendItem" nillable="true" type="tns:WebServiceSendItem" />
+        </s:sequence>
+      </s:complexType>
+      <s:complexType name="WebServiceSendItem">
+        <s:sequence>
+          <s:element minOccurs="0" maxOccurs="1" name="FactoryCode" type="s:string" />
+          <s:element minOccurs="0" maxOccurs="1" name="SkuCode" type="s:string" />
+          <s:element minOccurs="0" maxOccurs="1" name="Align" type="s:string" />
+          <s:element minOccurs="0" maxOccurs="1" name="Pallet" type="s:string" />
+          <s:element minOccurs="0" maxOccurs="1" name="PackageNo" type="s:string" />
+          <s:element minOccurs="1" maxOccurs="1" name="TrackLot" type="s:long" />
+          <s:element minOccurs="1" maxOccurs="1" name="Series" type="s:long" />
+          <s:element minOccurs="0" maxOccurs="1" name="MesStockID" type="s:string" />
+          <s:element minOccurs="1" maxOccurs="1" name="Quantity" type="s:decimal" />
+          <s:element minOccurs="0" maxOccurs="1" name="SapTrackLot" type="s:string" />
+          <s:element minOccurs="0" maxOccurs="1" name="Section" type="s:string" />
+          <s:element minOccurs="0" maxOccurs="1" name="DestSection" type="s:string" />
+          <s:element minOccurs="0" maxOccurs="1" name="SupplierCode" type="s:string" />
+          <s:element minOccurs="0" maxOccurs="1" name="SupplierTrackLot" type="s:string" />
+          <s:element minOccurs="0" maxOccurs="1" name="StageID" type="s:string" />
+          <s:element minOccurs="0" maxOccurs="1" name="Remark" type="s:string" />
+          <s:element minOccurs="0" maxOccurs="1" name="OrderCode" type="s:string" />
+        </s:sequence>
+      </s:complexType>
+      <s:element name="ReceiveMESScanItemListResponse">
+        <s:complexType>
+          <s:sequence>
+            <s:element minOccurs="0" maxOccurs="1" name="ReceiveMESScanItemListResult" type="tns:WSResponse" />
+          </s:sequence>
+        </s:complexType>
+      </s:element>
+      <s:complexType name="WSResponse">
+        <s:sequence>
+          <s:element minOccurs="0" maxOccurs="1" name="ErrorCode" type="s:string" />
+          <s:element minOccurs="0" maxOccurs="1" name="ErrorDesc" type="s:string" />
+        </s:sequence>
+      </s:complexType>
+      <s:element name="DeliOrderDelete">
+        <s:complexType>
+          <s:sequence>
+            <s:element minOccurs="0" maxOccurs="1" name="sFactoryCode" type="s:string" />
+            <s:element minOccurs="0" maxOccurs="1" name="sStockRecord" type="s:string" />
+          </s:sequence>
+        </s:complexType>
+      </s:element>
+      <s:element name="DeliOrderDeleteResponse">
+        <s:complexType>
+          <s:sequence>
+            <s:element minOccurs="0" maxOccurs="1" name="DeliOrderDeleteResult" type="tns:WSResponse" />
+          </s:sequence>
+        </s:complexType>
+      </s:element>
+      <s:element name="ReceiveReservation">
+        <s:complexType>
+          <s:sequence>
+            <s:element minOccurs="0" maxOccurs="1" name="oWebReservationOrder" type="tns:WebReservationOrder" />
+          </s:sequence>
+        </s:complexType>
+      </s:element>
+      <s:complexType name="WebReservationOrder">
+        <s:sequence>
+          <s:element minOccurs="0" maxOccurs="1" name="FactoryCode" type="s:string" />
+          <s:element minOccurs="0" maxOccurs="1" name="ReservationOrder" type="s:string" />
+          <s:element minOccurs="1" maxOccurs="1" name="Total" type="s:decimal" />
+        </s:sequence>
+      </s:complexType>
+      <s:element name="ReceiveReservationResponse">
+        <s:complexType>
+          <s:sequence>
+            <s:element minOccurs="0" maxOccurs="1" name="ReceiveReservationResult" type="tns:WSResponse" />
+          </s:sequence>
+        </s:complexType>
+      </s:element>
+      <s:element name="HelloWorld">
+        <s:complexType />
+      </s:element>
+      <s:element name="HelloWorldResponse">
+        <s:complexType>
+          <s:sequence>
+            <s:element minOccurs="0" maxOccurs="1" name="HelloWorldResult" type="s:string" />
+          </s:sequence>
+        </s:complexType>
+      </s:element>
+    </s:schema>
+  </wsdl:types>
+  <wsdl:message name="ReceiveMESScanItemListSoapIn">
+    <wsdl:part name="parameters" element="tns:ReceiveMESScanItemList" />
+  </wsdl:message>
+  <wsdl:message name="ReceiveMESScanItemListSoapOut">
+    <wsdl:part name="parameters" element="tns:ReceiveMESScanItemListResponse" />
+  </wsdl:message>
+  <wsdl:message name="DeliOrderDeleteSoapIn">
+    <wsdl:part name="parameters" element="tns:DeliOrderDelete" />
+  </wsdl:message>
+  <wsdl:message name="DeliOrderDeleteSoapOut">
+    <wsdl:part name="parameters" element="tns:DeliOrderDeleteResponse" />
+  </wsdl:message>
+  <wsdl:message name="ReceiveReservationSoapIn">
+    <wsdl:part name="parameters" element="tns:ReceiveReservation" />
+  </wsdl:message>
+  <wsdl:message name="ReceiveReservationSoapOut">
+    <wsdl:part name="parameters" element="tns:ReceiveReservationResponse" />
+  </wsdl:message>
+  <wsdl:message name="HelloWorldSoapIn">
+    <wsdl:part name="parameters" element="tns:HelloWorld" />
+  </wsdl:message>
+  <wsdl:message name="HelloWorldSoapOut">
+    <wsdl:part name="parameters" element="tns:HelloWorldResponse" />
+  </wsdl:message>
+  <wsdl:portType name="WebServiceSoap">
+    <wsdl:operation name="ReceiveMESScanItemList">
+      <wsdl:input message="tns:ReceiveMESScanItemListSoapIn" />
+      <wsdl:output message="tns:ReceiveMESScanItemListSoapOut" />
+    </wsdl:operation>
+    <wsdl:operation name="DeliOrderDelete">
+      <wsdl:input message="tns:DeliOrderDeleteSoapIn" />
+      <wsdl:output message="tns:DeliOrderDeleteSoapOut" />
+    </wsdl:operation>
+    <wsdl:operation name="ReceiveReservation">
+      <wsdl:input message="tns:ReceiveReservationSoapIn" />
+      <wsdl:output message="tns:ReceiveReservationSoapOut" />
+    </wsdl:operation>
+    <wsdl:operation name="HelloWorld">
+      <wsdl:input message="tns:HelloWorldSoapIn" />
+      <wsdl:output message="tns:HelloWorldSoapOut" />
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="WebServiceSoap" type="tns:WebServiceSoap">
+    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
+    <wsdl:operation name="ReceiveMESScanItemList">
+      <soap:operation soapAction="http://tempuri.org/ReceiveMESScanItemList" style="document" />
+      <wsdl:input>
+        <soap:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="DeliOrderDelete">
+      <soap:operation soapAction="http://tempuri.org/DeliOrderDelete" style="document" />
+      <wsdl:input>
+        <soap:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="ReceiveReservation">
+      <soap:operation soapAction="http://tempuri.org/ReceiveReservation" style="document" />
+      <wsdl:input>
+        <soap:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="HelloWorld">
+      <soap:operation soapAction="http://tempuri.org/HelloWorld" style="document" />
+      <wsdl:input>
+        <soap:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:binding name="WebServiceSoap12" type="tns:WebServiceSoap">
+    <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
+    <wsdl:operation name="ReceiveMESScanItemList">
+      <soap12:operation soapAction="http://tempuri.org/ReceiveMESScanItemList" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="DeliOrderDelete">
+      <soap12:operation soapAction="http://tempuri.org/DeliOrderDelete" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="ReceiveReservation">
+      <soap12:operation soapAction="http://tempuri.org/ReceiveReservation" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="HelloWorld">
+      <soap12:operation soapAction="http://tempuri.org/HelloWorld" style="document" />
+      <wsdl:input>
+        <soap12:body use="literal" />
+      </wsdl:input>
+      <wsdl:output>
+        <soap12:body use="literal" />
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="WebService">
+    <wsdl:port name="WebServiceSoap" binding="tns:WebServiceSoap">
+      <soap:address location="http://10.101.0.182:8002/MesWebService/WebService.asmx" />
+    </wsdl:port>
+    <wsdl:port name="WebServiceSoap12" binding="tns:WebServiceSoap12">
+      <soap12:address location="http://10.101.0.182:8002/MesWebService/WebService.asmx" />
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>
\ No newline at end of file

--
Gitblit v1.9.3