From c71714508fbe3ace3543423c7700d7bbcca90056 Mon Sep 17 00:00:00 2001
From: cuilei <ray_tsu1@163.com>
Date: 星期二, 12 八月 2025 13:41:37 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/main/java/org/jeecg/modules/base/service/IFactoryService.java                       |    6 
 src/main/java/org/jeecg/modules/wms/request/ReceiveMESScanItemList.java                 |    4 
 src/main/java/org/jeecg/modules/system/entity/SysUser.java                              |    6 
 src/main/resources/application-prod.yml                                                 |   11 
 src/main/java/org/jeecg/modules/mes/job/FeishuSyncTask.java                             |   40 +
 pom.xml                                                                                 |   16 
 src/main/java/org/jeecg/modules/sap/service/impl/OrderCloseServiceImpl.java             |    4 
 src/main/java/org/jeecg/modules/sap/service/ProductionOrderSync.java                    |    4 
 src/main/java/org/jeecg/modules/andon/controller/AndonButtonConfigController.java       |   33 +
 src/main/java/org/jeecg/modules/base/model/FactoryModel.java                            |   18 
 src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java             |    5 
 src/main/java/org/jeecg/modules/wms/config/WebServiceClientConfig.java                  |    4 
 src/main/resources/application-dev.yml                                                  |   12 
 src/main/java/org/jeecg/modules/mes/job/ProductionOrderSyncUpdateJob.java               |   10 
 src/main/java/org/jeecg/modules/sap/service/impl/OrderProcessSyncImpl.java              |   11 
 src/main/java/org/jeecg/modules/wms/service/impl/ReceiveWMSScanItemListServiceImpl.java |   14 
 src/main/java/org/jeecg/modules/base/controller/FactoryController.java                  |   14 
 src/main/java/org/jeecg/modules/sap/service/impl/OrderMaterialRequestServiceImpl.java   |   96 ++++
 src/main/java/org/jeecg/modules/sap/request/MaterialRequest.java                        |   16 
 db/双林新火炬MES数据库设计.pdma.json                                                              |   61 ++
 src/main/java/org/jeecg/modules/sap/service/OrderMaterialRequestService.java            |   21 
 src/main/java/org/jeecg/modules/mes/job/ProductionOrderSyncCreationJob.java             |   24 
 src/main/java/org/jeecg/modules/sap/service/impl/OrderReportServiceImpl.java            |   55 ++
 src/main/java/org/jeecg/modules/sap/FunctionConst.java                                  |    2 
 src/main/java/org/jeecg/modules/sap/service/impl/OrderLoadServiceImpl.java              |   49 ++
 src/main/java/org/jeecg/modules/system/service/ISysUserService.java                     |    2 
 src/main/java/org/jeecg/modules/sap/service/impl/ProductionOrderSyncImpl.java           |   88 +--
 src/main/java/org/jeecg/modules/wms/CxfClientUtil.java                                  |   32 +
 src/main/java/org/jeecg/modules/sap/controller/SAPTestController.java                   |   90 ++-
 src/main/java/org/jeecg/modules/mes/job/FeishuUserService.java                          |  327 ++++++++++++++
 src/main/java/org/jeecg/common/aspect/ApiLogAspect.java                                 |    8 
 src/main/java/org/jeecg/modules/mes/entity/FeishuUser.java                              |   26 +
 src/main/java/org/jeecg/modules/sap/dto/MaterialRequestDTO.java                         |   13 
 src/main/java/org/jeecg/config/Swagger2Config.java                                      |   79 +-
 src/main/java/org/jeecg/modules/base/service/impl/FactoryServiceImpl.java               |    9 
 src/main/java/org/jeecg/modules/sap/request/ProductionOrderSyncRequest.java             |   16 
 src/main/java/org/jeecg/modules/wms/dto/WSResponse.java                                 |    6 
 src/main/java/org/jeecg/modules/wms/config/WebServiceServerConfig.java                  |   39 +
 src/main/java/org/jeecg/modules/mes/entity/MesProductionOrder.java                      |    6 
 src/main/java/org/jeecg/modules/wms/service/ReceiveWMSScanItemListService.java          |    8 
 40 files changed, 1,113 insertions(+), 172 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 2308f0a..8b3fc7f 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,9 +2,9 @@
   "name": "鍙屾灄鏂扮伀鐐琈ES鏁版嵁搴撹璁�",
   "describe": "鎻忚堪鍙岃柂鏂扮伀鐐琈ES鏁版嵁搴撹璁¤鎯�",
   "avatar": "",
-  "version": "4.9.4",
+  "version": "4.9.2",
   "createdTime": "2025-3-10 16:38:19",
-  "updatedTime": "2025-8-7 10:18:16",
+  "updatedTime": "2025-8-12 12:29:31",
   "dbConns": [],
   "profile": {
     "default": {
@@ -10982,6 +10982,42 @@
           "extProps": {},
           "domain": "9092C4E0-1A54-4859-ABBB-5B62DBC27573",
           "id": "6E75C587-8628-4A76-BE8A-07CB2185F61B"
+        },
+        {
+          "defKey": "qualified_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": "B4405701-40E7-4987-B540-759F22DC5A91"
+        },
+        {
+          "defKey": "scrap_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": "48F2218D-6129-47BF-85BA-72737EEDCCAC"
         },
         {
           "defKey": "remark",
@@ -28089,6 +28125,24 @@
           "baseType": "89D69E81-EA34-42EE-9FA2-93B8BD27E098",
           "extProps": {},
           "uiHint": "642D2E0A-8846-4549-BE56-8C0473F26EDE"
+        },
+        {
+          "defKey": "open_id",
+          "defName": "椋炰功鐢ㄦ埛OPENID",
+          "comment": "",
+          "type": "",
+          "len": "",
+          "scale": "",
+          "primaryKey": false,
+          "notNull": false,
+          "autoIncrement": false,
+          "defaultValue": "",
+          "hideInGraph": false,
+          "refDict": "",
+          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64",
+          "extProps": {},
+          "domain": "BE09D493-E183-402D-ACC4-EEA21EB35B8E",
+          "id": "BDE72375-D196-41E2-A887-59B59C9A9479"
         }
       ],
       "indexes": [
@@ -28262,7 +28316,8 @@
           "hideInGraph": true
         }
       ],
-      "correlations": []
+      "correlations": [],
+      "notes": {}
     },
     {
       "id": "ADF40C7F-5C97-4196-BCA7-E780FCC8E2FB",
diff --git a/pom.xml b/pom.xml
index 40acc8d..559fb4f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -58,6 +58,8 @@
         <!-- Log4j2鐖嗛浄婕忔礊 -->
         <log4j2.version>2.17.0</log4j2.version>
         <logback.version>1.2.9</logback.version>
+        <!-- webservice -->
+        <cxf.version>3.2.4</cxf.version>
     </properties>
 
     <repositories>
@@ -220,17 +222,27 @@
             <artifactId>java-jwt</artifactId>
             <version>${java-jwt.version}</version>
         </dependency>
+        <!-- WebService -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web-services</artifactId>
+        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>org.apache.cxf</groupId>-->
+<!--            <artifactId>cxf-spring-boot-starter-jaxws</artifactId>-->
+<!--            <version>${cxf.version}</version>-->
+<!--        </dependency>-->
 
         <!-- CXF webservice -->
         <dependency>
             <groupId>org.apache.cxf</groupId>
             <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
-            <version>3.2.1</version>
+            <version>${cxf.version}</version>
         </dependency>
         <dependency>
             <groupId>org.apache.cxf</groupId>
             <artifactId>cxf-rt-transports-http</artifactId>
-            <version>3.2.1</version>
+            <version>${cxf.version}</version>
         </dependency>
 
         <!--shiro-->
diff --git a/src/main/java/org/jeecg/common/aspect/ApiLogAspect.java b/src/main/java/org/jeecg/common/aspect/ApiLogAspect.java
index 9da336c..2651f1a 100644
--- a/src/main/java/org/jeecg/common/aspect/ApiLogAspect.java
+++ b/src/main/java/org/jeecg/common/aspect/ApiLogAspect.java
@@ -146,6 +146,14 @@
             } catch (JsonProcessingException e) {
                 throw new JeecgBootException(e);
             }
+        } else {
+            try {
+                String json = objectMapper.writeValueAsString(result);
+                JSONObject item = JSONObject.parseObject(json, Feature.OrderedField);
+                items.add(item);
+            } catch (JsonProcessingException e) {
+                throw new JeecgBootException(e);
+            }
         }
         return items.toString();
     }
diff --git a/src/main/java/org/jeecg/config/Swagger2Config.java b/src/main/java/org/jeecg/config/Swagger2Config.java
index 1fb1a97..17afa0c 100644
--- a/src/main/java/org/jeecg/config/Swagger2Config.java
+++ b/src/main/java/org/jeecg/config/Swagger2Config.java
@@ -101,29 +101,6 @@
                 .groupName("MDC");
     }
 
-    /**
-     * swagger2鐨勯厤缃枃浠讹紝杩欓噷鍙互閰嶇疆swagger2鐨勪竴浜涘熀鏈殑鍐呭锛屾瘮濡傛壂鎻忕殑鍖呯瓑绛� 锛圖NC锛�
-     *
-     * @return Docket
-     */
-    @Bean(value = "defaultApiDnc")
-    public Docket defaultApi3() {
-        return new Docket(DocumentationType.SWAGGER_2)
-                .apiInfo(apiInfo())
-                .select()
-                //姝ゅ寘璺緞涓嬬殑绫伙紝鎵嶇敓鎴愭帴鍙f枃妗�
-                .apis(RequestHandlerSelectors.basePackage("org.jeecg.modules.dnc"))
-                //鍔犱簡ApiOperation娉ㄨВ鐨勭被锛屾墠鐢熸垚鎺ュ彛鏂囨。
-                .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
-                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
-                .paths(PathSelectors.any())
-                .build()
-                .securitySchemes(Collections.singletonList(securityScheme()))
-                .securityContexts(securityContexts())
-                .globalOperationParameters(setHeaderToken())
-                .groupName("DNC");
-    }
-
     @Bean(value = "defaultApiAct")
     public Docket activitiApi() {
         return new Docket(DocumentationType.SWAGGER_2)
@@ -142,24 +119,6 @@
                 .groupName("Flowable妯″潡");
     }
 
-    @Bean(value = "defaultApiMsi")
-    public Docket activitiApiMsi() {
-        return new Docket(DocumentationType.SWAGGER_2)
-                .apiInfo(apiInfo())
-                .select()
-                //姝ゅ寘璺緞涓嬬殑绫伙紝鎵嶇敓鎴愭帴鍙f枃妗�
-                .apis(RequestHandlerSelectors.basePackage("org.jeecg.modules.msi"))
-                //鍔犱簡ApiOperation娉ㄨВ鐨勭被锛屾墠鐢熸垚鎺ュ彛鏂囨。
-                .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
-                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
-                .paths(PathSelectors.any())
-                .build()
-                .securitySchemes(Collections.singletonList(securityScheme()))
-                .securityContexts(securityContexts())
-                .globalOperationParameters(setHeaderToken())
-                .groupName("闆嗘垚");
-    }
-
     @Bean(value = "defaultApiEam")
     public Docket activitiApiEam() {
         return new Docket(DocumentationType.SWAGGER_2)
@@ -175,7 +134,43 @@
                 .securitySchemes(Collections.singletonList(securityScheme()))
                 .securityContexts(securityContexts())
                 .globalOperationParameters(setHeaderToken())
-                .groupName("eam");
+                .groupName("EAM璁惧绠$悊");
+    }
+
+    @Bean(value = "defaultApiSAP")
+    public Docket defaultApiSAP() {
+        return new Docket(DocumentationType.SWAGGER_2)
+                .apiInfo(apiInfo())
+                .select()
+                //姝ゅ寘璺緞涓嬬殑绫伙紝鎵嶇敓鎴愭帴鍙f枃妗�
+                .apis(RequestHandlerSelectors.basePackage("org.jeecg.modules.sap"))
+                //鍔犱簡ApiOperation娉ㄨВ鐨勭被锛屾墠鐢熸垚鎺ュ彛鏂囨。
+                .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
+                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
+                .paths(PathSelectors.any())
+                .build()
+                .securitySchemes(Collections.singletonList(securityScheme()))
+                .securityContexts(securityContexts())
+                .globalOperationParameters(setHeaderToken())
+                .groupName("SAP瀵规帴");
+    }
+
+    @Bean(value = "defaultApiMES")
+    public Docket defaultApiMES() {
+        return new Docket(DocumentationType.SWAGGER_2)
+                .apiInfo(apiInfo())
+                .select()
+                //姝ゅ寘璺緞涓嬬殑绫伙紝鎵嶇敓鎴愭帴鍙f枃妗�
+                .apis(RequestHandlerSelectors.basePackage("org.jeecg.modules.mes"))
+                //鍔犱簡ApiOperation娉ㄨВ鐨勭被锛屾墠鐢熸垚鎺ュ彛鏂囨。
+                .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
+                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
+                .paths(PathSelectors.any())
+                .build()
+                .securitySchemes(Collections.singletonList(securityScheme()))
+                .securityContexts(securityContexts())
+                .globalOperationParameters(setHeaderToken())
+                .groupName("MES妯″潡");
     }
 
     /***
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 be0c78d..a589c4b 100644
--- a/src/main/java/org/jeecg/modules/andon/controller/AndonButtonConfigController.java
+++ b/src/main/java/org/jeecg/modules/andon/controller/AndonButtonConfigController.java
@@ -6,10 +6,12 @@
 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.entity.AndonButtonConfig;
 import org.jeecg.modules.andon.service.IAndonButtonConfigService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -56,6 +58,37 @@
        return Result.OK(pageList);
    }
 
+
+
+    /**
+     * APP鍒嗛〉鍒楄〃鏌ヨ
+     *
+     * @param andonButtonConfig
+     * @param pageNo
+     * @param pageSize
+     * @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) {
+        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);
+    }
+
    /**
     *   娣诲姞
     *
diff --git a/src/main/java/org/jeecg/modules/base/controller/FactoryController.java b/src/main/java/org/jeecg/modules/base/controller/FactoryController.java
index 75efb57..cfb5a5a 100644
--- a/src/main/java/org/jeecg/modules/base/controller/FactoryController.java
+++ b/src/main/java/org/jeecg/modules/base/controller/FactoryController.java
@@ -13,6 +13,7 @@
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.base.entity.Factory;
 import org.jeecg.modules.base.model.FactoryIdModel;
+import org.jeecg.modules.base.model.FactoryModel;
 import org.jeecg.modules.base.service.IFactoryService;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -220,6 +221,19 @@
 		 return result;
 	 }
 
+	 @ApiOperation(value = "鑾峰彇鎵�鏈変骇绾垮垪琛�", notes = "鑾峰彇鎵�鏈変骇绾垮垪琛�")
+	 @GetMapping(value = "/queryProductionLineList")
+	 public Result<List<FactoryModel>> queryProductionLineList() {
+		 List<Factory> factoryList = factoryService.queryProductionLineList();
+		 List<FactoryModel> factoryModels = factoryList.stream()
+				 .map(factory -> new FactoryModel(factory.getId(), factory.getFactoryName()))
+				 .collect(Collectors.toList());
+		 return Result.ok(factoryModels);
+	 }
+
+
+
+
 	 //@AutoLog(value = "浜х嚎琛�-鏌ヨ鏍戝舰缁撴瀯鎵�鏈変骇绾垮悕绉�")
 	 @ApiOperation(value = "浜х嚎琛�-鏌ヨ鏍戝舰缁撴瀯鎵�鏈変骇绾垮悕绉�", notes = "浜х嚎琛�-鏌ヨ鏍戝舰缁撴瀯鎵�鏈変骇绾垮悕绉�")
 	 @GetMapping(value = "/queryIdTree")
diff --git a/src/main/java/org/jeecg/modules/base/model/FactoryModel.java b/src/main/java/org/jeecg/modules/base/model/FactoryModel.java
new file mode 100644
index 0000000..89c62fa
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/base/model/FactoryModel.java
@@ -0,0 +1,18 @@
+package org.jeecg.modules.base.model;
+
+import lombok.Data;
+
+@Data
+public class FactoryModel {
+    // getter鍜宻etter鏂规硶
+    private String value;  // 浜х嚎ID
+    private String text;   // 浜х嚎鍚嶇О
+
+    public FactoryModel() {
+    }
+
+    public FactoryModel(String value, String text) {
+        this.value = value;
+        this.text = text;
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/base/service/IFactoryService.java b/src/main/java/org/jeecg/modules/base/service/IFactoryService.java
index e89a234..0f2a799 100644
--- a/src/main/java/org/jeecg/modules/base/service/IFactoryService.java
+++ b/src/main/java/org/jeecg/modules/base/service/IFactoryService.java
@@ -45,4 +45,10 @@
     List<Factory> queryFacByPid(String pid);
 
     List<String> recursionChildren(String factoryId);
+
+    /**
+     * 鏌ヨ鏌ヨ鍒楄〃
+     * @return
+     */
+    List<Factory> queryProductionLineList();
 }
diff --git a/src/main/java/org/jeecg/modules/base/service/impl/FactoryServiceImpl.java b/src/main/java/org/jeecg/modules/base/service/impl/FactoryServiceImpl.java
index 1464018..2307edd 100644
--- a/src/main/java/org/jeecg/modules/base/service/impl/FactoryServiceImpl.java
+++ b/src/main/java/org/jeecg/modules/base/service/impl/FactoryServiceImpl.java
@@ -175,6 +175,15 @@
         return this.baseMapper.recursionChildren(factoryId);
     }
 
+    @Override
+    public List<Factory> queryProductionLineList() {
+        LambdaQueryWrapper<Factory> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Factory::getDelFlag, CommonConstant.DEL_FLAG_0);
+        queryWrapper.eq(Factory::getFactoryCategory, "PRODUCTION_LINE");
+        queryWrapper.orderByAsc(Factory::getSorter);
+        return super.list(queryWrapper);
+    }
+
     /**
      * 鎵撳紑 鐖惰妭鐐� 鍙� 浠ヤ笂鐨刴dc鏍囪
      * @param parentId
diff --git a/src/main/java/org/jeecg/modules/mes/entity/FeishuUser.java b/src/main/java/org/jeecg/modules/mes/entity/FeishuUser.java
new file mode 100644
index 0000000..90ea6d9
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/mes/entity/FeishuUser.java
@@ -0,0 +1,26 @@
+package org.jeecg.modules.mes.entity;
+
+import lombok.Data;
+
+@Data
+public class FeishuUser {
+    private String openId;
+    private String name;
+    private String username;
+    private String realname;
+    private String workNo;
+    private String password;
+    private String userId;      // 瀵瑰簲 open_id
+    private String unionId;     // 瀵瑰簲 union_id
+    private String enName;      // 瀵瑰簲 en_name
+    private String description; // 瀵瑰簲 description
+    private String avatar240;   // 瀵瑰簲 avatar.avatar_240
+    private String avatar640;   // 瀵瑰簲 avatar.avatar_640
+    private String avatar72;    // 瀵瑰簲 avatar.avatar_72
+    private String avatarOrigin;// 瀵瑰簲 avatar.avatar_origin
+    private String email;
+    private String mobile;
+    private String employeeNo;
+    private Integer status;
+    private Boolean mobileVisible; // 瀵瑰簲 mobile_visible
+}
diff --git a/src/main/java/org/jeecg/modules/mes/entity/MesProductionOrder.java b/src/main/java/org/jeecg/modules/mes/entity/MesProductionOrder.java
index 2d2f5fa..be2c9e7 100644
--- a/src/main/java/org/jeecg/modules/mes/entity/MesProductionOrder.java
+++ b/src/main/java/org/jeecg/modules/mes/entity/MesProductionOrder.java
@@ -126,6 +126,12 @@
     /**瀹㈡埛鍚嶇О*/
     @ApiModelProperty(value = "瀹㈡埛鍚嶇О")
     private String customer;
+    /**鍚堟牸鏁伴噺*/
+    @ApiModelProperty(value = "鍚堟牸鏁伴噺")
+    private BigDecimal qualifiedQuantity;
+    /**鎶ュ簾鏁伴噺*/
+    @ApiModelProperty(value = "鎶ュ簾鏁伴噺")
+    private BigDecimal scrapQuantity;
     /**澶囨敞*/
     @ApiModelProperty(value = "澶囨敞")
     private String remark;
diff --git a/src/main/java/org/jeecg/modules/mes/job/FeishuSyncTask.java b/src/main/java/org/jeecg/modules/mes/job/FeishuSyncTask.java
new file mode 100644
index 0000000..36e816a
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/mes/job/FeishuSyncTask.java
@@ -0,0 +1,40 @@
+
+package org.jeecg.modules.mes.job;
+
+import lombok.extern.slf4j.Slf4j;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+/**
+ * 椋炰功鐢ㄦ埛鍚屾瀹氭椂浠诲姟
+ */
+@Component
+@Slf4j
+public class FeishuSyncTask implements Job {
+
+    @Autowired
+    private org.jeecg.modules.mes.job.FeishuUserService feishuUserService;
+
+    @Value("${feishu.sync.departmentId:0}")
+    private String departmentId;
+
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        log.info("寮�濮嬫墽琛岄涔︾敤鎴峰悓姝ヤ换鍔�");
+        try {
+            if (departmentId != null && !"0".equals(departmentId)) {
+                feishuUserService.syncFeishuDepartmentUsers(departmentId);
+                log.info("椋炰功鐢ㄦ埛鍚屾浠诲姟鎵ц瀹屾垚");
+            } else {
+                log.warn("鏈厤缃涔﹀悓姝ラ儴闂↖D锛岃烦杩囧悓姝ヤ换鍔�");
+            }
+        } catch (Exception e) {
+            log.error("椋炰功鐢ㄦ埛鍚屾浠诲姟鎵ц澶辫触", e);
+            throw new JobExecutionException(e);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/org/jeecg/modules/mes/job/FeishuUserService.java b/src/main/java/org/jeecg/modules/mes/job/FeishuUserService.java
new file mode 100644
index 0000000..b5b3991
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/mes/job/FeishuUserService.java
@@ -0,0 +1,327 @@
+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/job/ProductionOrderSyncCreationJob.java b/src/main/java/org/jeecg/modules/mes/job/ProductionOrderSyncCreationJob.java
index 086a7b1..d81111b 100644
--- a/src/main/java/org/jeecg/modules/mes/job/ProductionOrderSyncCreationJob.java
+++ b/src/main/java/org/jeecg/modules/mes/job/ProductionOrderSyncCreationJob.java
@@ -14,6 +14,7 @@
 import org.jeecg.modules.sap.dto.OrderBomDTO;
 import org.jeecg.modules.sap.dto.OrderProcessDTO;
 import org.jeecg.modules.sap.dto.ProductionOrderDTO;
+import org.jeecg.modules.sap.request.ProductionOrderSyncRequest;
 import org.jeecg.modules.sap.service.OrderBomSync;
 import org.jeecg.modules.sap.service.OrderProcessSync;
 import org.jeecg.modules.sap.service.ProductionOrderSync;
@@ -100,15 +101,22 @@
         //鑾峰彇涓婃鍚屾鏃堕棿
         String lastSyncDateLow = productionOrderService.getLastSyncCreateDate();
         String lastSyncDateHigh = null;
-        if(lastSyncDateLow != null) {
+        if (lastSyncDateLow != null) {
             lastSyncDateHigh = DateUtils.format(new Date(), "yyyyMMdd");
-            if(lastSyncDateLow.equals(lastSyncDateHigh)) {
+            if (lastSyncDateLow.equals(lastSyncDateHigh)) {
                 lastSyncDateHigh = null;
             }
         }
+        ProductionOrderSyncRequest request = new ProductionOrderSyncRequest();
+        request.setFactoryCode(FACTORY_CODE);
+        request.setOrderTypeCode(ORDER_TYPE_CODE);
+        request.setProductionManager(PRODUCTION_MANAGER);
+        request.setOrderStatus(ORDER_STATUS);
+        request.setCreateTimeLow(lastSyncDateLow);
+        request.setCreateTimeHigh(lastSyncDateHigh);
         try {
             //璋冪敤SAP鎺ュ彛鑾峰彇鐢熶骇璁㈠崟
-            Map<String, Object> productionOrderMap = productionOrderSync.syncProductionOrder(FACTORY_CODE, ORDER_TYPE_CODE, PRODUCTION_MANAGER, ORDER_STATUS, lastSyncDateLow, lastSyncDateHigh, null, null);
+            Map<String, Object> productionOrderMap = productionOrderSync.syncProductionOrder(request);
             if (productionOrderMap == null || !SUCCESS_CODE.equals(productionOrderMap.get("ztype"))) {
                 log.error("鏈悓姝ュ埌璁㈠崟淇℃伅锛佹棩鏈燂細{}", LocalDateTime.now());
                 return;
@@ -116,7 +124,7 @@
             //璋冪敤鎴愬姛锛岃幏鍙栬繑鍥炴暟鎹�
             Object result = productionOrderMap.get("result");
             boolean b = result instanceof List;
-            if(!b) {
+            if (!b) {
                 log.error("杩斿洖绫诲瀷閿欒锛� class:{}", result == null ? null : result.getClass());
                 return;
             }
@@ -132,13 +140,13 @@
             //璋冪敤鎴愬姛锛岃幏鍙栬繑鍥炴暟鎹�
             result = orderBomMap.get("result");
             b = result instanceof List;
-            if(!b) {
+            if (!b) {
                 log.error("杩斿洖绫诲瀷閿欒锛� class:{}", result == null ? null : result.getClass());
                 return;
             }
             List<OrderBomDTO> orderBomDTOList = (List<OrderBomDTO>) result;
             b = processBillMaterialsService.saveOrUpdateOrderBom(orderMap, orderBomDTOList);
-            if(!b) {
+            if (!b) {
                 log.error("淇濆瓨璁㈠崟BOM澶辫触锛屾棩鏈燂細{}", LocalDateTime.now());
                 return;
             }
@@ -151,13 +159,13 @@
             //璋冪敤鎴愬姛锛岃幏鍙栬繑鍥炴暟鎹�
             result = orderProcessMap.get("result");
             b = result instanceof List;
-            if(!b) {
+            if (!b) {
                 log.error("杩斿洖绫诲瀷閿欒锛� class:{}", result == null ? null : result.getClass());
                 return;
             }
             List<OrderProcessDTO> orderProcessDTOList = (List<OrderProcessDTO>) result;
             b = materialProcessService.saveOrUpdateOrderProcess(orderMap, orderProcessDTOList);
-            if(!b) {
+            if (!b) {
                 log.error("淇濆瓨璁㈠崟宸ュ簭澶辫触锛屾棩鏈燂細{}", LocalDateTime.now());
             }
             quartzLog.setIsSuccess(0);
diff --git a/src/main/java/org/jeecg/modules/mes/job/ProductionOrderSyncUpdateJob.java b/src/main/java/org/jeecg/modules/mes/job/ProductionOrderSyncUpdateJob.java
index 93dd7ee..6a7f780 100644
--- a/src/main/java/org/jeecg/modules/mes/job/ProductionOrderSyncUpdateJob.java
+++ b/src/main/java/org/jeecg/modules/mes/job/ProductionOrderSyncUpdateJob.java
@@ -14,6 +14,7 @@
 import org.jeecg.modules.sap.dto.OrderBomDTO;
 import org.jeecg.modules.sap.dto.OrderProcessDTO;
 import org.jeecg.modules.sap.dto.ProductionOrderDTO;
+import org.jeecg.modules.sap.request.ProductionOrderSyncRequest;
 import org.jeecg.modules.sap.service.OrderBomSync;
 import org.jeecg.modules.sap.service.OrderProcessSync;
 import org.jeecg.modules.sap.service.ProductionOrderSync;
@@ -106,9 +107,16 @@
                 lastSyncDateHigh = null;
             }
         }
+        ProductionOrderSyncRequest request = new ProductionOrderSyncRequest();
+        request.setFactoryCode(FACTORY_CODE);
+        request.setOrderTypeCode(ORDER_TYPE_CODE);
+        request.setProductionManager(PRODUCTION_MANAGER);
+        request.setOrderStatus(ORDER_STATUS);
+        request.setUpdateTimeLow(lastSyncDateLow);
+        request.setUpdateTimeHigh(lastSyncDateHigh);
         try {
             //璋冪敤SAP鎺ュ彛鑾峰彇鐢熶骇璁㈠崟
-            Map<String, Object> productionOrderMap = productionOrderSync.syncProductionOrder(FACTORY_CODE, ORDER_TYPE_CODE, PRODUCTION_MANAGER, ORDER_STATUS, null, null, lastSyncDateLow, lastSyncDateHigh);
+            Map<String, Object> productionOrderMap = productionOrderSync.syncProductionOrder(request);
             if (productionOrderMap == null || !SUCCESS_CODE.equals(productionOrderMap.get("ztype"))) {
                 log.error("鏈悓姝ュ埌璁㈠崟淇℃伅锛佹棩鏈燂細{}", LocalDateTime.now());
                 return;
diff --git a/src/main/java/org/jeecg/modules/sap/FunctionConst.java b/src/main/java/org/jeecg/modules/sap/FunctionConst.java
index 68929c6..538be8f 100644
--- a/src/main/java/org/jeecg/modules/sap/FunctionConst.java
+++ b/src/main/java/org/jeecg/modules/sap/FunctionConst.java
@@ -13,4 +13,6 @@
     public static final String ZMES_GOODSMVT_CREATE_2301 = "ZMES_GOODSMVT_CREATE_2301";
     //6.鐢熶骇璁㈠崟鍏抽棴鎺ュ彛
     public static final String ZPPF_019 = "ZPPF_019";
+    //7.SAP棰勭暀鍙峰垱寤烘帴鍙�
+    public static final String ZMES_RESERVATION_CREATE = "ZMES_RESERVATION_CREATE";
 }
diff --git a/src/main/java/org/jeecg/modules/sap/controller/SAPTestController.java b/src/main/java/org/jeecg/modules/sap/controller/SAPTestController.java
index 8292c82..8331808 100644
--- a/src/main/java/org/jeecg/modules/sap/controller/SAPTestController.java
+++ b/src/main/java/org/jeecg/modules/sap/controller/SAPTestController.java
@@ -4,15 +4,15 @@
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.sap.request.MaterialRequest;
 import org.jeecg.modules.sap.request.OrderLoadRequest;
 import org.jeecg.modules.sap.request.OrderReportRequest;
+import org.jeecg.modules.sap.request.ProductionOrderSyncRequest;
 import org.jeecg.modules.sap.service.*;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
-import java.math.BigDecimal;
+import java.util.List;
 import java.util.Map;
 
 @Api(tags = "SAP闆嗘垚娴嬭瘯")
@@ -34,7 +34,7 @@
 
     private static final String createTime = "20250508";
     private static final String updateTime = "20250101";
-//    @Autowired
+    //    @Autowired
 //    private SAPService sapService;
     @Autowired
     private ProductionOrderSync productionOrderSync;
@@ -48,71 +48,81 @@
     private OrderLoadService orderLoadService;
     @Autowired
     private OrderCloseService orderCloseService;
-
-//    @ApiOperation(value = "SAP闆嗘垚娴嬭瘯-娴嬭瘯鎺ュ彛", notes = "SAP闆嗘垚娴嬭瘯-娴嬭瘯鎺ュ彛")
-//    @GetMapping("/test")
-//    public Result<?> test() {
-//        String test = sapService.test();
-//        return Result.ok(test);
-//    }
+    @Autowired
+    private OrderMaterialRequestService orderMaterialRequestService;
 
     @ApiOperation(value = "SAP闆嗘垚娴嬭瘯-鐢熶骇璁㈠崟鍚屾鎺ュ彛", notes = "SAP闆嗘垚娴嬭瘯-鐢熶骇璁㈠崟鍚屾鎺ュ彛")
-    @GetMapping("/syncProductionOrder")
-    public Result<?> syncProductionOrder() throws Exception {
-        Map<String, Object> resultMap = productionOrderSync.syncProductionOrder(factoryCode, orderTypeCode1, productionManager, orderStatus, null, null, null, null);
+    @PostMapping("/syncProductionOrder")
+    public Result<?> syncProductionOrder(@RequestBody ProductionOrderSyncRequest request) throws Exception {
+//        ProductionOrderSyncRequest request = new ProductionOrderSyncRequest();
+//        request.setFactoryCode(factoryCode);
+//        request.setOrderTypeCode(orderTypeCode1);
+//        request.setProductionManager(productionManager);
+//        request.setOrderStatus(orderStatus);
+//        request.setOrderCode("10711342");
+        Map<String, Object> resultMap = productionOrderSync.syncProductionOrder(request);
         return Result.ok(resultMap);
     }
 
     @ApiOperation(value = "SAP闆嗘垚娴嬭瘯-璁㈠崟BOM鍚屾", notes = "SAP闆嗘垚娴嬭瘯-璁㈠崟BOM鍚屾")
     @GetMapping("/syncOrderBom")
-    public Result<?> syncOrderBom() throws Exception {
-        String orderCode = "10706312,10706988,10708077,10708078,10708825,10711404,10711404,10711543";
+    public Result<?> syncOrderBom(@RequestParam(value = "factoryCode") String factoryCode, @RequestParam(value = "orderCode") String orderCode) throws Exception {
+//        String orderCode = "10706312,10706988,10708077,10708078,10708825,10711404,10711404,10711543";
         Map<String, Object> resultMap = orderBomSync.syncOrderBom(factoryCode, orderCode);
         return Result.ok(resultMap);
     }
 
     @ApiOperation(value = "SAP闆嗘垚娴嬭瘯-璁㈠崟宸ュ簭鍚屾", notes = "SAP闆嗘垚娴嬭瘯-璁㈠崟宸ュ簭鍚屾")
     @GetMapping("/syncOrderProcess")
-    public Result<?> syncOrderProcess() throws Exception {
-        String orderCode = "10706312,10706988,10708077,10708078,10708825,10711404,10711404,10711543";
+    public Result<?> syncOrderProcess(@RequestParam(value = "factoryCode") String factoryCode, @RequestParam(value = "orderCode") String orderCode) throws Exception {
+//        String orderCode = "10706312,10706988,10708077,10708078,10708825,10711404,10711404,10711543";
         Map<String, Object> resultMap = orderProcessSync.syncOrderProcess(factoryCode, orderCode);
         return Result.ok(resultMap);
     }
 
     @ApiOperation(value = "SAP闆嗘垚娴嬭瘯-宸ュ簭鎶ュ伐", notes = "SAP闆嗘垚娴嬭瘯-宸ュ簭鎶ュ伐")
-    @GetMapping("/productionOrderReport")
-    public Result<?> productionOrderReport() throws Exception {
-        OrderReportRequest request = new OrderReportRequest();
-        request.setFactoryCode(factoryCode);
-        request.setOrderCode("10711404");
-        request.setWarehouseCode("7014"); //2# 绾胯竟搴�
-        request.setProcessCode("0040");
-        request.setQualifiedQuantity(new BigDecimal("180"));
-        request.setScrapQuantity(new BigDecimal("0"));
-        request.setKeyProcess("202505080102");
+    @PostMapping("/productionOrderReport")
+    public Result<?> productionOrderReport(@RequestBody OrderReportRequest request) throws Exception {
+//        OrderReportRequest request10 = new OrderReportRequest();
+//        request10.setFactoryCode(factoryCode);
+//        request10.setOrderCode("10711404");
+//        request10.setWarehouseCode("7014"); //2# 绾胯竟搴�
+//        request10.setProcessCode("0010");
+//        request10.setQualifiedQuantity(new BigDecimal("180"));
+//        request10.setScrapQuantity(new BigDecimal("0"));
+//        request10.setKeyProcess("202505080101");
+//        request10.setBatchNumber("202505080101");
         Map<String, Object> resultMap = orderReportService.productionOrderReport(request);
         return Result.ok(resultMap);
     }
 
     @ApiOperation(value = "SAP闆嗘垚娴嬭瘯-鐢熶骇璁㈠崟鎶曟枡", notes = "SAP闆嗘垚娴嬭瘯-鐢熶骇璁㈠崟鎶曟枡")
-    @GetMapping("/productionOrderLoad")
-    public Result<?> productionOrderLoad() throws Exception {
-        OrderLoadRequest request = new OrderLoadRequest();
-        request.setFactoryCode(factoryCode);
-        request.setOrderCode("10711404");
-        request.setWarehouseCode("7014"); //2# 绾胯竟搴�
-        request.setMaterialNumber("320013727");
-        request.setQuantity(new BigDecimal("180"));
-        request.setBatchNumber("202505080102");
+    @PostMapping("/productionOrderLoad")
+    public Result<?> productionOrderLoad(@RequestBody OrderLoadRequest request) throws Exception {
+//        OrderLoadRequest request = new OrderLoadRequest();
+//        request.setFactoryCode(factoryCode);
+//        request.setOrderCode("10711404");
+//        request.setWarehouseCode("7014"); //2# 绾胯竟搴�
+//        request.setMaterialNumber("320013727");
+//        request.setQuantity(new BigDecimal("180"));
+//        request.setBatchNumber("202505080102");
         Map<String, Object> resultMap = orderLoadService.productionOrderLoad(request);
         return Result.ok(resultMap);
     }
 
     @ApiOperation(value = "SAP闆嗘垚娴嬭瘯-鐢熶骇璁㈠崟鍏抽棴", notes = "SAP闆嗘垚娴嬭瘯-鐢熶骇璁㈠崟鍏抽棴")
     @GetMapping("/productionOrderClose")
-    public Result<?> productionOrderClose() throws Exception {
-        String orderCode = "10711404";
+    public Result<?> productionOrderClose(@RequestParam(value = "orderCode") String orderCode) throws Exception {
+//        String orderCode = "10698749";
         Map<String, Object> resultMap = orderCloseService.productionOrderClose(orderCode);
         return Result.ok(resultMap);
     }
+
+    @ApiOperation(value = "SAP闆嗘垚娴嬭瘯-鐗╂枡鎷夊姩", notes = "SAP闆嗘垚娴嬭瘯-鐗╂枡鎷夊姩")
+    @PostMapping("/orderMaterialRequest")
+    public Result<?> orderMaterialRequest(@RequestParam(value = "factoryCode") String factoryCode, @RequestParam(value = "warehouseCode") String warehouseCode, @RequestBody List<MaterialRequest> request) throws Exception {
+//        String orderCode = "10698749";
+        Map<String, Object> resultMap = orderMaterialRequestService.orderMaterialRequest(factoryCode, warehouseCode, request);
+        return Result.ok(resultMap);
+    }
 }
diff --git a/src/main/java/org/jeecg/modules/sap/dto/MaterialRequestDTO.java b/src/main/java/org/jeecg/modules/sap/dto/MaterialRequestDTO.java
new file mode 100644
index 0000000..10ce42c
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/sap/dto/MaterialRequestDTO.java
@@ -0,0 +1,13 @@
+package org.jeecg.modules.sap.dto;
+
+import lombok.Data;
+
+@Data
+public class MaterialRequestDTO {
+    /** 鎴愬姛鏍囪 Y-OK N-NG */
+    private String O_IS_OK;
+    /** 棰勭暀/鐩稿叧闇�姹傜殑缂栧彿 */
+    private String O_SAP_RESV;
+    /** 娑堟伅鏂囨湰 */
+    private String O_MESSAGE;
+}
diff --git a/src/main/java/org/jeecg/modules/sap/request/MaterialRequest.java b/src/main/java/org/jeecg/modules/sap/request/MaterialRequest.java
new file mode 100644
index 0000000..9b66962
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/sap/request/MaterialRequest.java
@@ -0,0 +1,16 @@
+package org.jeecg.modules.sap.request;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+public class MaterialRequest implements Serializable {
+    /** 鐗╂枡鍙� */
+    private String materialNumber;
+    /** 鏁伴噺 */
+    private BigDecimal quantity;
+    /** 鍙戣揣搴撳瓨鍦扮偣 */
+    private String warehouseCode;
+}
diff --git a/src/main/java/org/jeecg/modules/sap/request/ProductionOrderSyncRequest.java b/src/main/java/org/jeecg/modules/sap/request/ProductionOrderSyncRequest.java
new file mode 100644
index 0000000..7538cb6
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/sap/request/ProductionOrderSyncRequest.java
@@ -0,0 +1,16 @@
+package org.jeecg.modules.sap.request;
+
+import lombok.Data;
+
+@Data
+public class ProductionOrderSyncRequest {
+    private String factoryCode;
+    private String orderCode;
+    private String orderTypeCode;
+    private String productionManager;
+    private String orderStatus;
+    private String createTimeLow;
+    private String createTimeHigh;
+    private String updateTimeLow;
+    private String updateTimeHigh;
+}
diff --git a/src/main/java/org/jeecg/modules/sap/service/OrderMaterialRequestService.java b/src/main/java/org/jeecg/modules/sap/service/OrderMaterialRequestService.java
new file mode 100644
index 0000000..dddf041
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/sap/service/OrderMaterialRequestService.java
@@ -0,0 +1,21 @@
+package org.jeecg.modules.sap.service;
+
+import org.jeecg.modules.sap.request.MaterialRequest;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鐗╂枡鎷夊姩锛岄鐣欏彿璇锋眰
+ */
+public interface OrderMaterialRequestService {
+    /**
+     * 鐗╂枡鎷夊姩璇锋眰
+     * @param factoryCode 宸ュ巶缂栫爜
+     * @param receiveWarehouseCode 鎺ユ敹搴撳瓨鍦扮偣
+     * @param request 鐗╂枡鎷夊姩淇℃伅
+     * @return
+     * @throws Exception
+     */
+    Map<String, Object> orderMaterialRequest(String factoryCode, String receiveWarehouseCode, List<MaterialRequest> request) throws Exception;
+}
diff --git a/src/main/java/org/jeecg/modules/sap/service/ProductionOrderSync.java b/src/main/java/org/jeecg/modules/sap/service/ProductionOrderSync.java
index 52995cb..bb9aed9 100644
--- a/src/main/java/org/jeecg/modules/sap/service/ProductionOrderSync.java
+++ b/src/main/java/org/jeecg/modules/sap/service/ProductionOrderSync.java
@@ -1,10 +1,12 @@
 package org.jeecg.modules.sap.service;
 
+import org.jeecg.modules.sap.request.ProductionOrderSyncRequest;
+
 import java.util.Map;
 
 public interface ProductionOrderSync {
     /**
      * 鍚屾鐢熸垚璁㈠崟
      */
-    Map<String, Object> syncProductionOrder(String factoryCode, String orderTypeCode, String productionManager, String orderStatus, String createTimeLow, String createTimeHigh, String updateTimeLow, String updateTimeHigh) throws Exception;
+    Map<String, Object> syncProductionOrder(ProductionOrderSyncRequest request) throws Exception;
 }
diff --git a/src/main/java/org/jeecg/modules/sap/service/impl/OrderCloseServiceImpl.java b/src/main/java/org/jeecg/modules/sap/service/impl/OrderCloseServiceImpl.java
index 20449a1..e59bde2 100644
--- a/src/main/java/org/jeecg/modules/sap/service/impl/OrderCloseServiceImpl.java
+++ b/src/main/java/org/jeecg/modules/sap/service/impl/OrderCloseServiceImpl.java
@@ -38,8 +38,8 @@
         // 鎵ц璋冪敤
         function.execute(destination);
         //鑾峰彇杩斿洖缁撴灉
-        String ztype = function.getExportParameterList().getTable("ZTYPE").toString();
-        String zmess = function.getExportParameterList().getTable("ZMESS").toString();
+        String ztype = function.getExportParameterList().getValue("ZTYPE").toString();
+        String zmess = function.getExportParameterList().getValue("ZMESS").toString();
 
         resultMap.put("zmess", zmess);
         resultMap.put("ztype", ztype);
diff --git a/src/main/java/org/jeecg/modules/sap/service/impl/OrderLoadServiceImpl.java b/src/main/java/org/jeecg/modules/sap/service/impl/OrderLoadServiceImpl.java
index f04db7b..d2ee015 100644
--- a/src/main/java/org/jeecg/modules/sap/service/impl/OrderLoadServiceImpl.java
+++ b/src/main/java/org/jeecg/modules/sap/service/impl/OrderLoadServiceImpl.java
@@ -6,6 +6,7 @@
 import org.jeecg.common.constant.ApiLogCategoryEnum;
 import org.jeecg.config.sap.SapRfcConnectionManager;
 import org.jeecg.modules.sap.FunctionConst;
+import org.jeecg.modules.sap.dto.OrderLoadDTO;
 import org.jeecg.modules.sap.request.OrderLoadRequest;
 import org.jeecg.modules.sap.service.OrderLoadService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -52,15 +53,55 @@
         // 鎵ц璋冪敤
         function.execute(destination);
         //鑾峰彇杩斿洖缁撴灉
-        JCoTable eReturn = function.getExportParameterList().getTable("E_RETURN");
+        Object eReturn1 = function.getExportParameterList().getValue("E_RETURN");
+        OrderLoadDTO reportDTO1 = null;
+        if (eReturn1 != null) {
+            JCoStructure eReturn = (JCoStructure) eReturn1;
+            //E Return
+            reportDTO1 = new OrderLoadDTO();
+            reportDTO1.setTYPE(eReturn.getString("TYPE"));
+            reportDTO1.setID(eReturn.getString("ID"));
+            reportDTO1.setNUMBER(eReturn.getString("NUMBER"));
+            reportDTO1.setMESSAGE(eReturn.getString("MESSAGE"));
+            reportDTO1.setLOG_NO(eReturn.getString("LOG_NO"));
+            reportDTO1.setLOG_MSG_NO(eReturn.getString("LOG_MSG_NO"));
+            reportDTO1.setMESSAGE_V1(eReturn.getString("MESSAGE_V1"));
+            reportDTO1.setMESSAGE_V2(eReturn.getString("MESSAGE_V2"));
+            reportDTO1.setMESSAGE_V3(eReturn.getString("MESSAGE_V3"));
+            reportDTO1.setMESSAGE_V4(eReturn.getString("MESSAGE_V4"));
+            reportDTO1.setPARAMETER(eReturn.getString("PARAMETER"));
+            reportDTO1.setROW(eReturn.getString("ROW"));
+            reportDTO1.setFIELD(eReturn.getString("FIELD"));
+            reportDTO1.setSYSTEM(eReturn.getString("SYSTEM"));
+        }
         JCoTable tReturn1 = function.getTableParameterList().getTable("T_RETURN");
-        String zmess = "";
-        String ztype = "";//S 鏍囪瘑 鎴愬姛
+        OrderLoadDTO reportDTO2 = null;
+        if (tReturn1.getNumRows() > 0) {
+            tReturn1.setRow(0);
+            reportDTO2 = new OrderLoadDTO();
+            reportDTO2.setTYPE(tReturn1.getString("TYPE"));
+            reportDTO2.setID(tReturn1.getString("ID"));
+            reportDTO2.setNUMBER(tReturn1.getString("NUMBER"));
+            reportDTO2.setMESSAGE(tReturn1.getString("MESSAGE"));
+            reportDTO2.setLOG_NO(tReturn1.getString("LOG_NO"));
+            reportDTO2.setLOG_MSG_NO(tReturn1.getString("LOG_MSG_NO"));
+            reportDTO2.setMESSAGE_V1(tReturn1.getString("MESSAGE_V1"));
+            reportDTO2.setMESSAGE_V2(tReturn1.getString("MESSAGE_V2"));
+            reportDTO2.setMESSAGE_V3(tReturn1.getString("MESSAGE_V3"));
+            reportDTO2.setMESSAGE_V4(tReturn1.getString("MESSAGE_V4"));
+            reportDTO2.setPARAMETER(tReturn1.getString("PARAMETER"));
+            reportDTO2.setROW(tReturn1.getString("ROW"));
+            reportDTO2.setFIELD(tReturn1.getString("FIELD"));
+            reportDTO2.setSYSTEM(tReturn1.getString("SYSTEM"));
+        }
+
+        String zmess = reportDTO1 == null ? (reportDTO2 == null ? "" : reportDTO2.getMESSAGE()) : reportDTO1.getMESSAGE();
+        String ztype = reportDTO1 == null ? (reportDTO2 == null ? "" : reportDTO2.getTYPE()) : reportDTO1.getTYPE(); //S 鏍囪瘑 鎴愬姛
 
         resultMap.put("zmess", zmess);
         resultMap.put("ztype", ztype);
         resultMap.put("importParameters", request);
-        resultMap.put("result", null);
+        resultMap.put("result", reportDTO1 == null ? reportDTO2 : reportDTO1);
         return resultMap;
     }
 }
diff --git a/src/main/java/org/jeecg/modules/sap/service/impl/OrderMaterialRequestServiceImpl.java b/src/main/java/org/jeecg/modules/sap/service/impl/OrderMaterialRequestServiceImpl.java
new file mode 100644
index 0000000..1bf9282
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/sap/service/impl/OrderMaterialRequestServiceImpl.java
@@ -0,0 +1,96 @@
+package org.jeecg.modules.sap.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.parser.Feature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.sap.conn.jco.*;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.jeecg.common.aspect.annotation.ApiLog;
+import org.jeecg.common.constant.ApiLogCategoryEnum;
+import org.jeecg.config.sap.SapRfcConnectionManager;
+import org.jeecg.modules.sap.FunctionConst;
+import org.jeecg.modules.sap.dto.MaterialRequestDTO;
+import org.jeecg.modules.sap.request.MaterialRequest;
+import org.jeecg.modules.sap.service.OrderMaterialRequestService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+@Slf4j
+public class OrderMaterialRequestServiceImpl implements OrderMaterialRequestService {
+    @Autowired
+    private SapRfcConnectionManager connectionManager;
+    @Autowired
+    private ObjectMapper objectMapper;
+
+    @Override
+    @ApiLog(apiName = "SAP棰勭暀鍙峰垱寤�(ZMES_RESERVATION_CREATE)", apiCategory = ApiLogCategoryEnum.SAP)
+    public Map<String, Object> orderMaterialRequest(String factoryCode, String receiveWarehouseCode, List<MaterialRequest> request) throws Exception {
+        Map<String, Object> resultMap = new HashMap<>();
+        JCoDestination destination = connectionManager.getDestination();
+        JCoRepository repository = destination.getRepository();
+        JCoFunction function = repository.getFunction(FunctionConst.ZMES_RESERVATION_CREATE);
+        if (function == null) {
+            throw new RuntimeException("RFC 鍑芥暟 ZMES_RESERVATION_CREATE 鏈壘鍒帮紒");
+        }
+        if (StringUtils.isBlank(factoryCode) || StringUtils.isBlank(receiveWarehouseCode) || CollectionUtil.isEmpty(request)) {
+            resultMap.put("zmess", "宸ュ巶缂栫爜銆佹帴鏀跺簱瀛樺湴涓虹┖鎴栫墿鏂欎俊鎭负绌�");
+            resultMap.put("ztype", "-1");
+            resultMap.put("importParameters", factoryCode + "|" + receiveWarehouseCode + "|" + (request == null ? 0 : request.size()));
+            resultMap.put("result", null);
+            return resultMap;
+        }
+        // 璁剧疆杈撳叆鍙傛暟
+        List<JSONObject> items = new ArrayList<>();
+        //鏂扮伀鐐�
+        JCoParameterList importParameterList = function.getImportParameterList();
+        importParameterList.setValue("I_SITE", factoryCode);
+        //缁勮璇锋眰鍙傛暟
+        JSONObject item = new JSONObject();
+        item.put("I_SITE", factoryCode);
+        items.add(item);
+
+        //鎺ユ敹搴撳瓨鍦�
+        importParameterList.setValue("I_TO_STORGE_LOC", receiveWarehouseCode);
+        //缁勮璇锋眰鍙傛暟
+        item = new JSONObject();
+        item.put("I_TO_STORGE_LOC", factoryCode);
+        items.add(item);
+
+        JCoTable itemTable = function.getTableParameterList().getTable("T_ITEMS");
+        for (MaterialRequest itemReq : request) {
+            itemTable.appendRow();
+            itemTable.setValue("ITEM", itemReq.getMaterialNumber());
+            itemTable.setValue("PULL_QTY", itemReq.getQuantity());
+            itemTable.setValue("FROM_STORGE_LOC", itemReq.getWarehouseCode());
+            //缁勮璇锋眰鍙傛暟
+            String json = objectMapper.writeValueAsString(itemReq);
+            item = JSONObject.parseObject(json, Feature.OrderedField);
+            items.add(item);
+        }
+
+        // 鎵ц璋冪敤
+        function.execute(destination);
+        //鑾峰彇杩斿洖缁撴灉
+        MaterialRequestDTO response = new MaterialRequestDTO();
+        String zmess = function.getExportParameterList().getValue("O_IS_OK").toString();
+        String ztype = function.getExportParameterList().getValue("O_MESSAGE").toString();//S 鏍囪瘑 鎴愬姛
+        String resv = function.getExportParameterList().getValue("O_SAP_RESV").toString();//S 鏍囪瘑 鎴愬姛
+        response.setO_IS_OK(ztype);
+        response.setO_MESSAGE(zmess);
+        response.setO_SAP_RESV(resv);
+        //杩斿洖缁撴灉
+        resultMap.put("zmess", zmess);
+        resultMap.put("ztype", ztype);
+        resultMap.put("importParameters", items);
+        resultMap.put("result", response);
+        return resultMap;
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/sap/service/impl/OrderProcessSyncImpl.java b/src/main/java/org/jeecg/modules/sap/service/impl/OrderProcessSyncImpl.java
index 2fdd666..722bdc1 100644
--- a/src/main/java/org/jeecg/modules/sap/service/impl/OrderProcessSyncImpl.java
+++ b/src/main/java/org/jeecg/modules/sap/service/impl/OrderProcessSyncImpl.java
@@ -1,20 +1,25 @@
 package org.jeecg.modules.sap.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
-import com.sap.conn.jco.*;
+import com.sap.conn.jco.JCoDestination;
+import com.sap.conn.jco.JCoFunction;
+import com.sap.conn.jco.JCoRepository;
+import com.sap.conn.jco.JCoTable;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.jeecg.common.aspect.annotation.ApiLog;
 import org.jeecg.common.constant.ApiLogCategoryEnum;
 import org.jeecg.config.sap.SapRfcConnectionManager;
 import org.jeecg.modules.sap.FunctionConst;
-import org.jeecg.modules.sap.dto.OrderBomDTO;
 import org.jeecg.modules.sap.dto.OrderProcessDTO;
 import org.jeecg.modules.sap.service.OrderProcessSync;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 @Service
 @Slf4j
diff --git a/src/main/java/org/jeecg/modules/sap/service/impl/OrderReportServiceImpl.java b/src/main/java/org/jeecg/modules/sap/service/impl/OrderReportServiceImpl.java
index 8339959..b6603d3 100644
--- a/src/main/java/org/jeecg/modules/sap/service/impl/OrderReportServiceImpl.java
+++ b/src/main/java/org/jeecg/modules/sap/service/impl/OrderReportServiceImpl.java
@@ -6,6 +6,7 @@
 import org.jeecg.common.constant.ApiLogCategoryEnum;
 import org.jeecg.config.sap.SapRfcConnectionManager;
 import org.jeecg.modules.sap.FunctionConst;
+import org.jeecg.modules.sap.dto.OrderReportDTO;
 import org.jeecg.modules.sap.request.OrderReportRequest;
 import org.jeecg.modules.sap.service.OrderReportService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -48,15 +49,61 @@
         // 鎵ц璋冪敤
         function.execute(destination);
         //鑾峰彇杩斿洖缁撴灉
-        JCoTable eReturn = function.getExportParameterList().getTable("E_RETURN");
+        Object eReturn1 = function.getExportParameterList().getValue("E_RETURN");
+        OrderReportDTO reportDTO1 = null;
+        if (eReturn1 != null) {
+            JCoStructure eReturn = (JCoStructure) eReturn1;
+            //E Return
+            reportDTO1 = new OrderReportDTO();
+            reportDTO1.setTYPE(eReturn.getString("TYPE"));
+            reportDTO1.setID(eReturn.getString("ID"));
+            reportDTO1.setNUMBER(eReturn.getString("NUMBER"));
+            reportDTO1.setMESSAGE(eReturn.getString("MESSAGE"));
+            reportDTO1.setLOG_NO(eReturn.getString("LOG_NO"));
+            reportDTO1.setLOG_MSG_NO(eReturn.getString("LOG_MSG_NO"));
+            reportDTO1.setMESSAGE_V1(eReturn.getString("MESSAGE_V1"));
+            reportDTO1.setMESSAGE_V2(eReturn.getString("MESSAGE_V2"));
+            reportDTO1.setMESSAGE_V3(eReturn.getString("MESSAGE_V3"));
+            reportDTO1.setMESSAGE_V4(eReturn.getString("MESSAGE_V4"));
+            reportDTO1.setPARAMETER(eReturn.getString("PARAMETER"));
+            reportDTO1.setROW(eReturn.getString("ROW"));
+            reportDTO1.setFIELD(eReturn.getString("FIELD"));
+            reportDTO1.setSYSTEM(eReturn.getString("SYSTEM"));
+            reportDTO1.setFLG_LOCKED(eReturn.getString("FLG_LOCKED"));
+            reportDTO1.setCONF_NO(eReturn.getString("CONF_NO"));
+            reportDTO1.setCONF_CNT(eReturn.getString("CONF_CNT"));
+        }
         JCoTable tReturn1 = function.getTableParameterList().getTable("T_RETURN");
-        String zmess = "";
-        String ztype = "";//S 鏍囪瘑 鎴愬姛
+        OrderReportDTO reportDTO2 = null;
+        if (tReturn1.getNumRows() > 0) {
+            tReturn1.setRow(0);
+            reportDTO2 = new OrderReportDTO();
+            reportDTO2.setTYPE(tReturn1.getString("TYPE"));
+            reportDTO2.setID(tReturn1.getString("ID"));
+            reportDTO2.setNUMBER(tReturn1.getString("NUMBER"));
+            reportDTO2.setMESSAGE(tReturn1.getString("MESSAGE"));
+            reportDTO2.setLOG_NO(tReturn1.getString("LOG_NO"));
+            reportDTO2.setLOG_MSG_NO(tReturn1.getString("LOG_MSG_NO"));
+            reportDTO2.setMESSAGE_V1(tReturn1.getString("MESSAGE_V1"));
+            reportDTO2.setMESSAGE_V2(tReturn1.getString("MESSAGE_V2"));
+            reportDTO2.setMESSAGE_V3(tReturn1.getString("MESSAGE_V3"));
+            reportDTO2.setMESSAGE_V4(tReturn1.getString("MESSAGE_V4"));
+            reportDTO2.setPARAMETER(tReturn1.getString("PARAMETER"));
+            reportDTO2.setROW(tReturn1.getString("ROW"));
+            reportDTO2.setFIELD(tReturn1.getString("FIELD"));
+            reportDTO2.setSYSTEM(tReturn1.getString("SYSTEM"));
+            reportDTO2.setFLG_LOCKED(tReturn1.getString("FLG_LOCKED"));
+            reportDTO2.setCONF_NO(tReturn1.getString("CONF_NO"));
+            reportDTO2.setCONF_CNT(tReturn1.getString("CONF_CNT"));
+        }
+
+        String zmess = reportDTO1 == null ? (reportDTO2 == null ? "" : reportDTO2.getMESSAGE()) : reportDTO1.getMESSAGE();
+        String ztype = reportDTO1 == null ? (reportDTO2 == null ? "" : reportDTO2.getTYPE()) : reportDTO1.getTYPE(); //S 鏍囪瘑 鎴愬姛
 
         resultMap.put("zmess", zmess);
         resultMap.put("ztype", ztype);
         resultMap.put("importParameters", request);
-        resultMap.put("result", null);
+        resultMap.put("result", reportDTO1 == null ? reportDTO2 : reportDTO1);
         return resultMap;
     }
 }
diff --git a/src/main/java/org/jeecg/modules/sap/service/impl/ProductionOrderSyncImpl.java b/src/main/java/org/jeecg/modules/sap/service/impl/ProductionOrderSyncImpl.java
index 960a8c4..2f39fda 100644
--- a/src/main/java/org/jeecg/modules/sap/service/impl/ProductionOrderSyncImpl.java
+++ b/src/main/java/org/jeecg/modules/sap/service/impl/ProductionOrderSyncImpl.java
@@ -1,6 +1,5 @@
 package org.jeecg.modules.sap.service.impl;
 
-import com.alibaba.fastjson.JSONObject;
 import com.sap.conn.jco.JCoDestination;
 import com.sap.conn.jco.JCoFunction;
 import com.sap.conn.jco.JCoRepository;
@@ -12,6 +11,7 @@
 import org.jeecg.config.sap.SapRfcConnectionManager;
 import org.jeecg.modules.sap.FunctionConst;
 import org.jeecg.modules.sap.dto.ProductionOrderDTO;
+import org.jeecg.modules.sap.request.ProductionOrderSyncRequest;
 import org.jeecg.modules.sap.service.ProductionOrderSync;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -33,7 +33,7 @@
 
     @Override
     @ApiLog(apiName = "鐢熶骇璁㈠崟鍚屾(ZPPF_033_1)", apiCategory = ApiLogCategoryEnum.SAP)
-    public Map<String, Object> syncProductionOrder(String factoryCode, String orderTypeCode, String productionManager, String orderStatus, String createTimeLow, String createTimeHigh, String updateTimeLow, String updateTimeHigh) throws Exception {
+    public Map<String, Object> syncProductionOrder(ProductionOrderSyncRequest request) throws Exception {
         Map<String, Object> resultMap = new HashMap<>();
         JCoDestination destination = connectionManager.getDestination();
         JCoRepository repository = destination.getRepository();
@@ -43,94 +43,68 @@
         }
         // 璁剧疆杈撳叆鍙傛暟
         //璁㈠崟鍙锋煡璇㈡潯浠�
-//            JCoTable AUFNRTable = function.getTableParameterList().getTable("ZTAB_AUFNR");
-        List<JSONObject> items = new ArrayList<>();
+        if (StringUtils.isNotBlank(request.getOrderCode())) {
+            JCoTable AUFNRTable = function.getTableParameterList().getTable("ZTAB_AUFNR");
+            String[] split = request.getOrderCode().split(",");
+            for (String code : split) {
+                AUFNRTable.appendRow();
+                AUFNRTable.setValue("AUFNR", code);
+            }
+        }
         //璁㈠崟绫诲瀷 鏍囧噯鐢熶骇璁㈠崟
-        if(StringUtils.isNotBlank(orderTypeCode)){
+        if (StringUtils.isNotBlank(request.getOrderTypeCode())) {
             JCoTable AUARTTable = function.getTableParameterList().getTable("ZTAB_AUART");
-            String[] split = orderTypeCode.split(",");
-            for(String code : split){
+            String[] split = request.getOrderTypeCode().split(",");
+            for (String code : split) {
                 AUARTTable.appendRow();
                 AUARTTable.setValue("AUART", code);
             }
-            //缁勮璇锋眰鍙傛暟
-            JSONObject item = new JSONObject();
-            item.put("AUART", orderTypeCode);
-            items.add(item);
         }
-        if(StringUtils.isNotBlank(productionManager)){
+        if (StringUtils.isNotBlank(request.getProductionManager())) {
             JCoTable FEVORTable = function.getTableParameterList().getTable("ZTAB_FEVOR");
-            String[] split = productionManager.split(",");
-            for(String code : split){
+            String[] split = request.getProductionManager().split(",");
+            for (String code : split) {
                 FEVORTable.appendRow();
                 FEVORTable.setValue("FEVOR", code);
             }
-            //缁勮璇锋眰鍙傛暟
-            JSONObject item = new JSONObject();
-            item.put("FEVOR", productionManager);
-            items.add(item);
         }
-        if(StringUtils.isNotBlank(factoryCode)){
+        if (StringUtils.isNotBlank(request.getFactoryCode())) {
             //鏂扮伀鐐�
             JCoTable WERKSTable = function.getTableParameterList().getTable("ZTAB_WERKS");
-            String[] split = factoryCode.split(",");
-            for(String code : split){
+            String[] split = request.getFactoryCode().split(",");
+            for (String code : split) {
                 WERKSTable.appendRow();
                 WERKSTable.setValue("WERKS", code);
             }
-            //缁勮璇锋眰鍙傛暟
-            JSONObject item = new JSONObject();
-            item.put("WERKS", factoryCode);
-            items.add(item);
         }
-        if(StringUtils.isNotBlank(orderStatus)) {
+        if (StringUtils.isNotBlank(request.getOrderStatus())) {
             //鏂扮伀鐐�
             JCoTable TXT04Table = function.getTableParameterList().getTable("ZTAB_TXT04");
-            String[] split = orderStatus.split(",");
-            for(String code : split){
+            String[] split = request.getOrderStatus().split(",");
+            for (String code : split) {
                 TXT04Table.appendRow();
                 TXT04Table.setValue("TXT04", code);
             }
-            //缁勮璇锋眰鍙傛暟
-            JSONObject item = new JSONObject();
-            item.put("TXT04", orderStatus);
-            items.add(item);
         }
-        if(StringUtils.isNotBlank(createTimeLow)){
+        if (StringUtils.isNotBlank(request.getCreateTimeLow())) {
             JCoTable UDATETable = function.getTableParameterList().getTable("ZTAB_UDATE");
             UDATETable.appendRow();
-            UDATETable.setValue("LOW", createTimeLow);
-            //缁勮璇锋眰鍙傛暟
-            JSONObject item = new JSONObject();
-            item.put("ZTAB_UDATE_LOW", createTimeLow);
-            items.add(item);
+            UDATETable.setValue("LOW", request.getCreateTimeLow());
         }
-        if(StringUtils.isNotBlank(createTimeHigh)){
+        if (StringUtils.isNotBlank(request.getCreateTimeHigh())) {
             JCoTable UDATETable = function.getTableParameterList().getTable("ZTAB_UDATE");
             UDATETable.appendRow();
-            UDATETable.setValue("HIGH", createTimeHigh);
-            //缁勮璇锋眰鍙傛暟
-            JSONObject item = new JSONObject();
-            item.put("ZTAB_UDATE_HIGH", createTimeHigh);
-            items.add(item);
+            UDATETable.setValue("HIGH", request.getCreateTimeHigh());
         }
-        if(StringUtils.isNotBlank(updateTimeLow)){
+        if (StringUtils.isNotBlank(request.getUpdateTimeLow())) {
             JCoTable LAEDATable = function.getTableParameterList().getTable("ZTAB_LAEDA");
             LAEDATable.appendRow();
-            LAEDATable.setValue("LOW", updateTimeLow);
-            //缁勮璇锋眰鍙傛暟
-            JSONObject item = new JSONObject();
-            item.put("ZTAB_LAEDA_LOW", updateTimeLow);
-            items.add(item);
+            LAEDATable.setValue("LOW", request.getUpdateTimeLow());
         }
-        if(StringUtils.isNotBlank(updateTimeHigh)){
+        if (StringUtils.isNotBlank(request.getUpdateTimeHigh())) {
             JCoTable LAEDATable = function.getTableParameterList().getTable("ZTAB_LAEDA");
             LAEDATable.appendRow();
-            LAEDATable.setValue("HIGH", updateTimeLow);
-            //缁勮璇锋眰鍙傛暟
-            JSONObject item = new JSONObject();
-            item.put("ZTAB_LAEDA_HIGH", updateTimeLow);
-            items.add(item);
+            LAEDATable.setValue("HIGH", request.getUpdateTimeHigh());
         }
         // 鎵ц璋冪敤
         function.execute(destination);
@@ -176,7 +150,7 @@
         }
         resultMap.put("zmess", zmess);
         resultMap.put("ztype", ztype);
-        resultMap.put("importParameters", items);
+        resultMap.put("importParameters", request);
         resultMap.put("result", resultList);
         return resultMap;
     }
diff --git a/src/main/java/org/jeecg/modules/system/entity/SysUser.java b/src/main/java/org/jeecg/modules/system/entity/SysUser.java
index 233d20b..3d2db93 100644
--- a/src/main/java/org/jeecg/modules/system/entity/SysUser.java
+++ b/src/main/java/org/jeecg/modules/system/entity/SysUser.java
@@ -125,6 +125,12 @@
     @Excel(name = "宸ュ彿", width = 15)
     private String workNo;
 
+
+    /**
+     * 椋炰功id锛屽敮涓�閿�
+     */
+    @Excel(name = "椋炰功id", width = 15)
+    private String openId;
     /**
      * 鑱屽姟锛屽叧鑱旇亴鍔¤〃
      */
diff --git a/src/main/java/org/jeecg/modules/system/service/ISysUserService.java b/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
index 3ab96db..f70dfa9 100644
--- a/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
+++ b/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
@@ -363,4 +363,6 @@
 	 * @return
 	 */
 	IPage<SysUser> getUserByFactoryId(Page<SysUser> page, String factoryId, String username);
+
+    void editUser(SysUser sysUser);
 }
diff --git a/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java b/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
index 1fd0c21..d605ced 100644
--- a/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
+++ b/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
@@ -832,4 +832,9 @@
 	public IPage<SysUser> getUserByFactoryId(Page<SysUser> page, String factoryId, String username) {
 		return userMapper.getUserByFactoryId(page,factoryId,username);
 	}
+
+	@Override
+	public void editUser(SysUser sysUser) {
+		userMapper.updateById(sysUser);
+	}
 }
diff --git a/src/main/java/org/jeecg/modules/wms/CxfClientUtil.java b/src/main/java/org/jeecg/modules/wms/CxfClientUtil.java
new file mode 100644
index 0000000..484d2c9
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/wms/CxfClientUtil.java
@@ -0,0 +1,32 @@
+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/config/WebServiceClientConfig.java b/src/main/java/org/jeecg/modules/wms/config/WebServiceClientConfig.java
new file mode 100644
index 0000000..23a94af
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/wms/config/WebServiceClientConfig.java
@@ -0,0 +1,4 @@
+package org.jeecg.modules.wms.config;
+
+public class WebServiceClientConfig {
+}
diff --git a/src/main/java/org/jeecg/modules/wms/config/WebServiceServerConfig.java b/src/main/java/org/jeecg/modules/wms/config/WebServiceServerConfig.java
new file mode 100644
index 0000000..0c818be
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/wms/config/WebServiceServerConfig.java
@@ -0,0 +1,39 @@
+package org.jeecg.modules.wms.config;
+
+import org.apache.cxf.Bus;
+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.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.web.servlet.ServletRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.xml.ws.Endpoint;
+
+
+@Configuration
+public class WebServiceServerConfig {
+    @Autowired
+    private ReceiveWMSScanItemListService receiveWMSScanItemListService;
+
+    @Bean(name = "cxfServer")
+    public Bus springBus() {
+        return new SpringBus();
+    }
+
+    @Bean(name = "cxfServlet")  // 娉ㄥ叆servlet bean name涓嶈兘dispatcherServlet ,鍚﹀垯浼氳鐩杁ispatcherServlet
+    public ServletRegistrationBean<CXFServlet> cxfServlet() {
+        return new ServletRegistrationBean<CXFServlet>(new CXFServlet(), "/webservice/*");
+    }
+
+    @Bean
+    public Endpoint endpoint() {
+        // 鍙傛暟浜岋紝鏄疭EI瀹炵幇绫诲璞�
+        Endpoint endpoint = new EndpointImpl(this.springBus(), receiveWMSScanItemListService);
+        // 鍙戝竷鏈嶅姟
+        endpoint.publish("/userService");
+        return endpoint;
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/wms/dto/WSResponse.java b/src/main/java/org/jeecg/modules/wms/dto/WSResponse.java
new file mode 100644
index 0000000..611bfcd
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/wms/dto/WSResponse.java
@@ -0,0 +1,6 @@
+package org.jeecg.modules.wms.dto;
+
+public class WSResponse {
+    private String ErrorCode;
+    private String ErrorDesc;
+}
diff --git a/src/main/java/org/jeecg/modules/wms/request/ReceiveMESScanItemList.java b/src/main/java/org/jeecg/modules/wms/request/ReceiveMESScanItemList.java
new file mode 100644
index 0000000..a6132e0
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/wms/request/ReceiveMESScanItemList.java
@@ -0,0 +1,4 @@
+package org.jeecg.modules.wms.request;
+
+public class ReceiveMESScanItemList {
+}
diff --git a/src/main/java/org/jeecg/modules/wms/service/ReceiveWMSScanItemListService.java b/src/main/java/org/jeecg/modules/wms/service/ReceiveWMSScanItemListService.java
new file mode 100644
index 0000000..2026d5a
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/wms/service/ReceiveWMSScanItemListService.java
@@ -0,0 +1,8 @@
+package org.jeecg.modules.wms.service;
+
+import javax.jws.WebService;
+
+@WebService
+public interface ReceiveWMSScanItemListService {
+
+}
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
new file mode 100644
index 0000000..94d8dae
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/wms/service/impl/ReceiveWMSScanItemListServiceImpl.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.wms.service.impl;
+
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.modules.wms.service.ReceiveWMSScanItemListService;
+import org.springframework.stereotype.Service;
+
+import javax.jws.WebService;
+
+
+@WebService(name = "ReceiveWMSScanItemListService",  targetNamespace = "http://xhj008.server.webservice.com")
+@Slf4j
+@Service
+public class ReceiveWMSScanItemListServiceImpl implements ReceiveWMSScanItemListService {
+}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index b365287..84dc636 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -283,10 +283,8 @@
       client-secret: ??
       agent-id: ??
 webservice:
-  url: http://localhost:8081/services/EquipmentService?wsdl
-  namespace: http://service.server.webservice.example.com
-  statusMethod: equipmentStatus
-  rateMethod: equipmentRate
+  url: http://10.101.0.182:8002/MesWebService/WebService.asmx?wsdl
+  namespace: http://tempuri.org/
 # SAP RFC鏂瑰紡鎺ュ彛闆嗘垚
 sap:
   rfc:
@@ -300,3 +298,9 @@
     poolSize: 5               # 绾跨▼姹犳暟閲�
     expirationTime: 10000     # 杩囨湡鏃堕棿
     peekLimit: 10             # 宄板��
+feishu:
+  url: https://open.feishu.cn/
+  appId: cli_a74aab6353b7d00e
+  appSecret: mx5wm7X9S8WSzZCOYlxcggXTFL8iujIT
+  sync:
+    departmentId: od-47692f32e6b66cc3985d317fee780a8b
\ No newline at end of file
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index 48063b6..e28975a 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -281,6 +281,9 @@
       # appSecret
       client-secret: ??
       agent-id: ??
+webservice:
+  url: http://10.101.0.182:8002/MesWebService/WebService.asmx?wsdl
+  namespace: http://tempuri.org/
 # SAP RFC鏂瑰紡鎺ュ彛闆嗘垚
 sap:
   rfc:
@@ -293,4 +296,10 @@
     lang: ZH                  # 璇█
     poolSize: 5               # 绾跨▼姹犳暟閲�
     expirationTime: 10000     # 杩囨湡鏃堕棿
-    peekLimit: 10             # 宄板��
\ No newline at end of file
+    peekLimit: 10             # 宄板��
+feishu:
+  url: https://open.feishu.cn/
+  appId: cli_a74aab6353b7d00e
+  appSecret: mx5wm7X9S8WSzZCOYlxcggXTFL8iujIT
+  sync:
+    departmentId: od-47692f32e6b66cc3985d317fee780a8b
\ No newline at end of file

--
Gitblit v1.9.3