From 7405307e8fd816263592d19c99d20f8b1b601160 Mon Sep 17 00:00:00 2001
From: zhangherong <571457620@qq.com>
Date: 星期一, 18 八月 2025 18:14:31 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/main/java/org/jeecg/modules/lsw/enums/MaterialCategoryEnum.java                       |   12 
 src/main/java/org/jeecg/modules/andon/service/impl/AndonButtonConfigServiceImpl.java      |   15 
 src/main/java/org/jeecg/modules/pms/vo/ProcessBillMaterialsDetailVo.java                  |   33 +
 src/main/java/org/jeecg/modules/andon/service/impl/AndonResponseConfigServiceImpl.java    |   19 
 src/main/java/org/jeecg/modules/andon/service/IAndonResponseConfigService.java            |    7 
 src/main/java/org/jeecg/modules/lsw/entity/LswMaterialInbound.java                        |    3 
 src/main/java/org/jeecg/modules/andon/controller/AndonButtonConfigController.java         |  295 +++++++-----
 src/main/java/org/jeecg/modules/andon/entity/AndonOrder.java                              |    3 
 src/main/java/org/jeecg/modules/andon/mapper/AndonButtonConfigMapper.java                 |   26 +
 src/main/java/org/jeecg/modules/mes/controller/MesTransferOrderPrintController.java       |    2 
 src/main/resources/application-dev.yml                                                    |    1 
 src/main/java/org/jeecg/modules/andon/service/IAndonButtonConfigService.java              |   24 +
 src/main/java/org/jeecg/modules/andon/service/impl/AndonOrderServiceImpl.java             |   34 +
 src/main/java/org/jeecg/modules/mes/service/impl/MesWorkReportingServiceImpl.java         |  198 +++++++-
 db/双林新火炬MES数据库设计.pdma.json                                                                |   20 
 src/main/java/org/jeecg/modules/mes/service/impl/MesProductionWorkOrderServiceImpl.java   |    3 
 src/main/java/org/jeecg/modules/cms/entity/CuttingInbound.java                            |    1 
 src/main/java/org/jeecg/modules/sap/request/OrderReportRequest.java                       |    2 
 src/main/java/org/jeecg/modules/andon/controller/AndonResponseConfigController.java       |   14 
 src/main/java/org/jeecg/modules/base/enums/ProductionTypeEnum.java                        |   15 
 src/main/java/org/jeecg/modules/andon/service/IAndonOrderService.java                     |    9 
 src/main/java/org/jeecg/modules/lsw/controller/LswMaterialController.java                 |   47 ++
 src/main/java/org/jeecg/modules/pms/service/impl/PmsProcessBillMaterialsServiceImpl.java  |   30 +
 src/main/java/org/jeecg/modules/mes/entity/MesMaterialLoading.java                        |    5 
 src/main/java/org/jeecg/modules/mes/controller/MesWorkReportingController.java            |    2 
 src/main/java/org/jeecg/modules/mes/entity/MesProductionWorkOrder.java                    |    4 
 src/main/java/org/jeecg/modules/sap/request/OrderLoadRequest.java                         |    2 
 src/main/java/org/jeecg/modules/andon/dto/AndonButtonDTO.java                             |    3 
 src/main/java/org/jeecg/modules/andon/mapper/xml/AndonButtonConfigMapper.xml              |  186 ++++++++
 src/main/java/org/jeecg/modules/mes/controller/MesProductionWorkOrderController.java      |    8 
 src/main/java/org/jeecg/modules/pms/service/IPmsProcessBillMaterialsService.java          |    3 
 src/main/java/org/jeecg/modules/mes/entity/MesWorkReporting.java                          |    3 
 src/main/java/org/jeecg/modules/mes/controller/MesKittingCompletenessCheckController.java |    2 
 src/main/java/org/jeecg/modules/andon/controller/AndonOrderController.java                |  251 ++++++-----
 34 files changed, 963 insertions(+), 319 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 6b165cf..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"
@@ -4,7 +4,7 @@
   "avatar": "",
   "version": "4.9.2",
   "createdTime": "2025-3-10 16:38:19",
-  "updatedTime": "2025-8-16 15:26:48",
+  "updatedTime": "2025-8-18 15:02:20",
   "dbConns": [],
   "profile": {
     "default": {
@@ -11555,6 +11555,24 @@
           "id": "125E1F1A-A084-4244-8D44-57D5838EE133"
         },
         {
+          "defKey": "finished_pallets",
+          "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": "A2AFA492-7799-4E1C-B2AB-A6004630C951"
+        },
+        {
           "defKey": "publisher",
           "defName": "鍙戝竷浜�",
           "comment": "",
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 633af0f..f1b74a5 100644
--- a/src/main/java/org/jeecg/modules/andon/controller/AndonButtonConfigController.java
+++ b/src/main/java/org/jeecg/modules/andon/controller/AndonButtonConfigController.java
@@ -2,21 +2,18 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 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.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.entity.AndonOrder;
 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;
@@ -27,41 +24,42 @@
 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;
+    @Autowired
+    private IAndonButtonConfigService andonButtonConfigService;
+    @Autowired
+    private AndonOrderServiceImpl andonOrderServiceImpl;
 
-   /**
-    * 鍒嗛〉鍒楄〃鏌ヨ
-    *
-    * @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);
-   }
-
+    /**
+     * 鍒嗛〉鍒楄〃鏌ヨ
+     *
+     * @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);
+    }
 
 
     /**
@@ -70,117 +68,152 @@
      * @param factoryId
      * @return
      */
-    @ApiOperation(value="瀹夌伅鎸夐挳閰嶇疆-鍒嗛〉鍒楄〃鏌ヨ", notes="瀹夌伅鎸夐挳閰嶇疆-鍒嗛〉鍒楄〃鏌ヨ")
+    @ApiOperation(value = "瀹夌伅鎸夐挳閰嶇疆-鍒嗛〉鍒楄〃鏌ヨ", notes = "瀹夌伅鎸夐挳閰嶇疆-鍒嗛〉鍒楄〃鏌ヨ")
     @GetMapping(value = "/queryUserAndonButtonList")
-        public Result<List<AndonButtonDTO>> queryUserAndonButtonList(@RequestParam("factoryId") String factoryId) {
+    public Result<List<AndonButtonDTO>> queryUserAndonButtonList(@RequestParam("factoryId") String factoryId) {
         List<AndonButtonDTO> list = andonButtonConfigService.queryUserAndonButtonList(factoryId);
         return Result.OK(list);
     }
 
 
+    /**
+     * 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);
+    }
 
+    /**
+     * 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);
+    }
 
+    /**
+     * 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: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("缂栬緫鎴愬姛!");
+    }
 
-   /**
-    *  缂栬緫
-    *
-    * @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("鍒犻櫎鎴愬姛!");
+    }
 
-   /**
-    *   閫氳繃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("鎵归噺鍒犻櫎鎴愬姛!");
+    }
 
-   /**
-    *  鎵归噺鍒犻櫎
-    *
-    * @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);
+    }
 
-   /**
-    * 閫氳繃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 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 23ca85f..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,41 +23,42 @@
 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
+     * @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);
+    }
 
 
     /**
@@ -65,7 +68,7 @@
      * @return
      */
     @AutoLog(value = "瀹夌伅宸ュ崟-娣诲姞")
-    @ApiOperation(value="瀹夌伅宸ュ崟-娣诲姞", notes="瀹夌伅宸ュ崟-娣诲姞")
+    @ApiOperation(value = "瀹夌伅宸ュ崟-娣诲姞", notes = "瀹夌伅宸ュ崟-娣诲姞")
     @PostMapping(value = "/add")
     public Result<String> add(@RequestBody AndonOrder andonOrder) {
         andonOrderService.save(andonOrder);
@@ -73,92 +76,120 @@
     }
 
 
+    /**
+     * 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("鍝嶅簲鎴愬姛锛�");
+    }
 
-   /**
-    *  缂栬緫
-    *
-    * @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("鍒犻櫎鎴愬姛!");
-   }
+    /**
+     * APP瀹夌伅澶勭悊鎿嶄綔
+     *
+     *
+     * @return
+     */
+    @ApiOperation(value = "APP瀹夌伅澶勭悊鎿嶄綔", notes = "APP瀹夌伅澶勭悊鎿嶄綔")
+    @PostMapping(value = "/AndonHandel")
+    public Result<String> AndonHandel(@RequestBody AndonOrder andonOrder) {
+        return andonOrderService.handleAndonOrder(andonOrder);
+    }
 
-   /**
-    *  鎵归噺鍒犻櫎
-    *
-    * @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);
-   }
+    /**
+     * 缂栬緫
+     *
+     * @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("缂栬緫鎴愬姛!");
+    }
 
-   /**
-   * 瀵煎嚭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, "瀹夌伅宸ュ崟");
-   }
+    /**
+     * 閫氳繃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 63510ae..976af22 100644
--- a/src/main/java/org/jeecg/modules/andon/controller/AndonResponseConfigController.java
+++ b/src/main/java/org/jeecg/modules/andon/controller/AndonResponseConfigController.java
@@ -181,18 +181,4 @@
         return super.importExcel(request, response, AndonResponseConfig.class);
     }
 
-
-    /**
-     * APP瀹夌伅鎸夐挳鍒楄〃鏌ヨ
-     *
-     * @param factoryId
-     * @return
-     */
-    @ApiOperation(value = "瀹夌伅鎸夐挳閰嶇疆-鍒楄〃鏌ヨ", notes = "瀹夌伅鎸夐挳閰嶇疆-鍒楄〃鏌ヨ")
-    @GetMapping(value = "/queryAndonButtonList")
-    public Result<List<AndonButtonDTO>> queryAndonButtonList(@RequestParam("factoryId") String factoryId) {
-        List<AndonButtonDTO> list = andonResponseConfigService.queryAndonButtonList(factoryId);
-        return Result.OK(list);
-    }
-
 }
diff --git a/src/main/java/org/jeecg/modules/andon/dto/AndonButtonDTO.java b/src/main/java/org/jeecg/modules/andon/dto/AndonButtonDTO.java
index 8c82ac8..044b1dd 100644
--- a/src/main/java/org/jeecg/modules/andon/dto/AndonButtonDTO.java
+++ b/src/main/java/org/jeecg/modules/andon/dto/AndonButtonDTO.java
@@ -77,4 +77,7 @@
     @ApiModelProperty(value = "宸ュ崟鐘舵��")
     private String orderStatus;
 
+    @ApiModelProperty(value = "瀹夌伅鍙戣捣浜�")
+    private String operator;
+
 }
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/mapper/AndonButtonConfigMapper.java b/src/main/java/org/jeecg/modules/andon/mapper/AndonButtonConfigMapper.java
index 6812614..dbf50f1 100644
--- a/src/main/java/org/jeecg/modules/andon/mapper/AndonButtonConfigMapper.java
+++ b/src/main/java/org/jeecg/modules/andon/mapper/AndonButtonConfigMapper.java
@@ -21,4 +21,30 @@
      * @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/xml/AndonButtonConfigMapper.xml b/src/main/java/org/jeecg/modules/andon/mapper/xml/AndonButtonConfigMapper.xml
index 128f32a..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,7 +2,11 @@
 <!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,
@@ -13,15 +17,189 @@
                 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)
+                  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
+            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/service/IAndonButtonConfigService.java b/src/main/java/org/jeecg/modules/andon/service/IAndonButtonConfigService.java
index b928375..500343c 100644
--- a/src/main/java/org/jeecg/modules/andon/service/IAndonButtonConfigService.java
+++ b/src/main/java/org/jeecg/modules/andon/service/IAndonButtonConfigService.java
@@ -21,4 +21,28 @@
      * @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 08a9fa5..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;
@@ -22,4 +23,12 @@
      */
     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 253efbf..58aa6bb 100644
--- a/src/main/java/org/jeecg/modules/andon/service/IAndonResponseConfigService.java
+++ b/src/main/java/org/jeecg/modules/andon/service/IAndonResponseConfigService.java
@@ -15,12 +15,7 @@
 public interface IAndonResponseConfigService extends IService<AndonResponseConfig> {
     AndonResponseConfig getAndonResponseConfigByFactoryIdAndButtonId(String factoryId, String buttonId);
 
-    /**
-     * 鏍规嵁宸ュ巶id鏌ヨ鎸夐挳鍒楄〃
-     * @param factoryId 宸ュ巶id
-     * @return
-     */
-    List<AndonButtonDTO> queryAndonButtonList(String factoryId);
+
 
 
     /**
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 e1ebd85..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
@@ -29,5 +29,20 @@
         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 e12effd..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
@@ -3,12 +3,14 @@
 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;
@@ -60,4 +62,36 @@
         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 c895470..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
@@ -3,6 +3,8 @@
 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;
@@ -49,10 +51,7 @@
         return baseMapper.getAndonResponseConfigByFactoryIdAndButtonId(factoryId, buttonId);
     }
 
-    @Override
-    public List<AndonButtonDTO> queryAndonButtonList(String factoryId) {
-        return Collections.emptyList();
-    }
+
 
     @Override
     public void sendAndonNotification(AndonButtonDTO andonButtonDTO) {
@@ -64,6 +63,10 @@
             throw new IllegalArgumentException("璇锋眰鍙傛暟涓嶈兘涓虹┖");
         }
         /**
+         * 璁剧疆瀹夌伅浜�
+         */
+
+        /**
          * 2. 鑾峰彇鍝嶅簲閰嶇疆
          */
         AndonResponseConfig andonResponseConfig = this.getById(andonButtonDTO.getId());
@@ -73,6 +76,14 @@
             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) {
diff --git a/src/main/java/org/jeecg/modules/base/enums/ProductionTypeEnum.java b/src/main/java/org/jeecg/modules/base/enums/ProductionTypeEnum.java
index 6ec4ff1..e6b7a92 100644
--- a/src/main/java/org/jeecg/modules/base/enums/ProductionTypeEnum.java
+++ b/src/main/java/org/jeecg/modules/base/enums/ProductionTypeEnum.java
@@ -17,5 +17,18 @@
     /**
      * 鐑鐞�
      */
-    HEATTREATMENT
+    HEATTREATMENT;
+
+    /**
+     * @param name 鏋氫妇鐨勫悕绉�
+     * @return 瀵瑰簲鐨� ProductionTypeEnum 鏋氫妇绫诲瀷锛屽鏋滄湭鎵惧埌鍒欒繑鍥� null
+     */
+    public static ProductionTypeEnum fromName(String name) {
+        for (ProductionTypeEnum typeEnum : ProductionTypeEnum.values()) {
+            if (typeEnum.name().equals(name)) {
+                return typeEnum;
+            }
+        }
+        return null;
+    }
 }
diff --git a/src/main/java/org/jeecg/modules/cms/entity/CuttingInbound.java b/src/main/java/org/jeecg/modules/cms/entity/CuttingInbound.java
index 3f184b1..a55dc67 100644
--- a/src/main/java/org/jeecg/modules/cms/entity/CuttingInbound.java
+++ b/src/main/java/org/jeecg/modules/cms/entity/CuttingInbound.java
@@ -61,6 +61,7 @@
 	/**鍏ュ簱鍗曠姸鎬�*/
 	@Excel(name = "鍏ュ簱鍗曠姸鎬�", width = 15)
     @ApiModelProperty(value = "鍏ュ簱鍗曠姸鎬�")
+    @Dict(dicCode = "order_status")
     private String orderStatus;
 	/**鍏ュ簱浜�*/
 	@Excel(name = "鍏ュ簱浜�", width = 15)
diff --git a/src/main/java/org/jeecg/modules/lsw/controller/LswMaterialController.java b/src/main/java/org/jeecg/modules/lsw/controller/LswMaterialController.java
index 25b8af6..222c87a 100644
--- a/src/main/java/org/jeecg/modules/lsw/controller/LswMaterialController.java
+++ b/src/main/java/org/jeecg/modules/lsw/controller/LswMaterialController.java
@@ -1,5 +1,7 @@
 package org.jeecg.modules.lsw.controller;
 
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -15,10 +17,14 @@
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.base.entity.Factory;
 import org.jeecg.modules.base.entity.LineSideWarehouse;
+import org.jeecg.modules.base.enums.ProductionTypeEnum;
+import org.jeecg.modules.base.service.IFactoryService;
 import org.jeecg.modules.base.service.ILineSideWarehouseService;
 import org.jeecg.modules.lsw.entity.LswMaterial;
 import org.jeecg.modules.lsw.entity.LswMaterialInventory;
+import org.jeecg.modules.lsw.enums.MaterialCategoryEnum;
 import org.jeecg.modules.lsw.service.ILswMaterialInventoryService;
 import org.jeecg.modules.lsw.service.ILswMaterialService;
 import org.jeecg.modules.lsw.vo.LswMaterialPage;
@@ -53,6 +59,8 @@
     private ILswMaterialInventoryService lswMaterialInventoryService;
     @Autowired
     private ILineSideWarehouseService lineSideWarehouseService;
+    @Autowired
+    private IFactoryService factoryService;
 
     /**
      * 鍒嗛〉鍒楄〃鏌ヨ
@@ -160,6 +168,45 @@
         return Result.OK(lswMaterialInventoryList);
     }
 
+    @AutoLog(value = "绾胯竟搴撶墿鏂欎俊鎭�-閫氳繃浜х嚎绫诲瀷鏌ヨ绾胯竟搴撶墿鏂�")
+    @ApiOperation(value = "绾胯竟搴撶墿鏂欎俊鎭�-閫氳繃浜х嚎绫诲瀷鏌ヨ绾胯竟搴撶墿鏂�", notes = "绾胯竟搴撶墿鏂欎俊鎭�-閫氳繃浜х嚎绫诲瀷鏌ヨ绾胯竟搴撶墿鏂�")
+    @GetMapping(value = "/queryLswMaterialByProductionType")
+    public Result<List<LswMaterial>> queryLswMaterialByProductionType(@RequestParam("factoryId") String factoryId) {
+        Factory factory = factoryService.getById(factoryId);
+        ProductionTypeEnum productionType = ProductionTypeEnum.fromName(factory.getProductionType());
+        List<LswMaterial> lswMaterialList = CollectionUtil.newArrayList();
+        if (productionType == null) {
+            throw new JeecgBootException("浜х嚎绫诲瀷鏈缃紝鏃犳硶鏌ヨ鐩稿簲鐗╂枡淇℃伅锛�");
+        }
+        switch (productionType) {
+            case ASSEMBLE:
+                //瑁呴厤绾匡紝鏌ヨ鎴愬搧鐗╂枡
+                lswMaterialList = lswMaterialService.list(new LambdaQueryWrapper<LswMaterial>()
+                        .eq(LswMaterial::getMaterialCategory, MaterialCategoryEnum.FINISHED_PRODUCT.name())
+                        .eq(LswMaterial::getDelFlag, CommonConstant.DEL_FLAG_0)
+                        .eq(LswMaterial::getMaterialStatus, CommonConstant.STATUS_1)
+                        .orderByAsc(LswMaterial::getMaterialNumber));
+                break;
+            case INNERFLANGE:
+                //鍐呮硶鍏版満鍔犵嚎锛屾煡璇㈠唴娉曞叞鐗╂枡
+                lswMaterialList = lswMaterialService.list(new LambdaQueryWrapper<LswMaterial>()
+                        .eq(LswMaterial::getMaterialCategory, MaterialCategoryEnum.INNER_FLANGE.name())
+                        .eq(LswMaterial::getDelFlag, CommonConstant.DEL_FLAG_0)
+                        .eq(LswMaterial::getMaterialStatus, CommonConstant.STATUS_1)
+                        .orderByAsc(LswMaterial::getMaterialNumber));
+                break;
+            case OUTERFLANGE:
+                //澶栨硶鍏版満鍔犵嚎锛屾煡璇㈠娉曞叞鐗╂枡
+                lswMaterialList = lswMaterialService.list(new LambdaQueryWrapper<LswMaterial>()
+                        .eq(LswMaterial::getMaterialCategory, MaterialCategoryEnum.OUTER_FLANGE.name())
+                        .eq(LswMaterial::getDelFlag, CommonConstant.DEL_FLAG_0)
+                        .eq(LswMaterial::getMaterialStatus, CommonConstant.STATUS_1)
+                        .orderByAsc(LswMaterial::getMaterialNumber));
+                break;
+        }
+        return Result.OK(lswMaterialList);
+    }
+
     /**
      * 瀵煎嚭excel
      *
diff --git a/src/main/java/org/jeecg/modules/lsw/entity/LswMaterialInbound.java b/src/main/java/org/jeecg/modules/lsw/entity/LswMaterialInbound.java
index 92f6e24..8827025 100644
--- a/src/main/java/org/jeecg/modules/lsw/entity/LswMaterialInbound.java
+++ b/src/main/java/org/jeecg/modules/lsw/entity/LswMaterialInbound.java
@@ -15,6 +15,7 @@
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -81,7 +82,7 @@
 	/**鍏ュ簱鏁伴噺*/
 	@Excel(name = "鍏ュ簱鏁伴噺", width = 15)
     @ApiModelProperty(value = "鍏ュ簱鏁伴噺")
-    private Double quantity;
+    private BigDecimal quantity;
 	/**鎺ユ敹浜�*/
 	@Excel(name = "鎺ユ敹浜�", width = 15)
     @ApiModelProperty(value = "鎺ユ敹浜�")
diff --git a/src/main/java/org/jeecg/modules/lsw/enums/MaterialCategoryEnum.java b/src/main/java/org/jeecg/modules/lsw/enums/MaterialCategoryEnum.java
index 4d49942..6037d5d 100644
--- a/src/main/java/org/jeecg/modules/lsw/enums/MaterialCategoryEnum.java
+++ b/src/main/java/org/jeecg/modules/lsw/enums/MaterialCategoryEnum.java
@@ -5,6 +5,14 @@
     OUTER_FLANGE, //澶栨硶鍏�
     INNER_FLANGE, //鍐呮硶鍏�
     COMPONENTS, //閰嶄欢
-    BLANK, //姣涘澂
-    ;
+    BLANK; //姣涘澂
+
+    public static MaterialCategoryEnum fromName(String name) {
+        for (MaterialCategoryEnum category : MaterialCategoryEnum.values()) {
+            if (category.name().equals(name)) {
+                return category;
+            }
+        }
+        return null;
+    }
 }
diff --git a/src/main/java/org/jeecg/modules/mes/controller/MesKittingCompletenessCheckController.java b/src/main/java/org/jeecg/modules/mes/controller/MesKittingCompletenessCheckController.java
index 930c5f4..3062674 100644
--- a/src/main/java/org/jeecg/modules/mes/controller/MesKittingCompletenessCheckController.java
+++ b/src/main/java/org/jeecg/modules/mes/controller/MesKittingCompletenessCheckController.java
@@ -30,7 +30,7 @@
 */
 @Api(tags="榻愬鎬ф鏌ヨ褰�")
 @RestController
-@RequestMapping("/meskittingcompletenesscheck/mesKittingCompletenessCheck")
+@RequestMapping("/mes/mesKittingCompletenessCheck")
 @Slf4j
 public class MesKittingCompletenessCheckController extends JeecgController<MesKittingCompletenessCheck, IMesKittingCompletenessCheckService> {
    @Autowired
diff --git a/src/main/java/org/jeecg/modules/mes/controller/MesProductionWorkOrderController.java b/src/main/java/org/jeecg/modules/mes/controller/MesProductionWorkOrderController.java
index c021299..d86777d 100644
--- a/src/main/java/org/jeecg/modules/mes/controller/MesProductionWorkOrderController.java
+++ b/src/main/java/org/jeecg/modules/mes/controller/MesProductionWorkOrderController.java
@@ -38,7 +38,7 @@
  */
 @Api(tags = "鎺掍骇宸ュ崟")
 @RestController
-@RequestMapping("/mesproductionworkorder/mesProductionWorkOrder")
+@RequestMapping("/mes/mesProductionWorkOrder")
 @Slf4j
 public class MesProductionWorkOrderController extends JeecgController<MesProductionWorkOrder, IMesProductionWorkOrderService> {
     @Autowired
@@ -204,10 +204,12 @@
     @GetMapping(value = "/execute")
     public Result<?> execute(@RequestParam("id") String id) {
         MesProductionWorkOrder workOrder = mesProductionWorkOrderService.getById(id);
-        if (!ProductionWorkOrderStatus.PUBLISHED.name().equals(workOrder.getWorkOrderStatus())) {
+        if (!ProductionWorkOrderStatus.PUBLISHED.name().equals(workOrder.getWorkOrderStatus())
+                && !CommonConstant.DEFAULT_1.equals(workOrder.getCompletenessCheckFlag())
+                && !CommonConstant.DEFAULT_1.equals(workOrder.getEquipmentInspectionFlag())
+                && !CommonConstant.DEFAULT_1.equals(workOrder.getProcessInspectionFlag())) {
             return Result.error("褰撳墠宸ュ崟鐘舵�佷笉鑳芥墽琛岋紒");
         }
-        //todo 榻愬鎬ф鏌ャ�佸伐鑹虹偣妫�銆佽澶囩偣妫� 鐨勬牎楠岄�昏緫
         MesProductionWorkOrder executeOrder = new MesProductionWorkOrder()
                 .setId(id)
                 .setWorkOrderStatus(ProductionWorkOrderStatus.EXECUTING.name());
diff --git a/src/main/java/org/jeecg/modules/mes/controller/MesTransferOrderPrintController.java b/src/main/java/org/jeecg/modules/mes/controller/MesTransferOrderPrintController.java
index 488fc2f..4692be5 100644
--- a/src/main/java/org/jeecg/modules/mes/controller/MesTransferOrderPrintController.java
+++ b/src/main/java/org/jeecg/modules/mes/controller/MesTransferOrderPrintController.java
@@ -28,7 +28,7 @@
 */
 @Api(tags="绉诲簱鍗曟墦鍗�")
 @RestController
-@RequestMapping("/mestransferorderprint/mesTransferOrderPrint")
+@RequestMapping("/mes/mesTransferOrderPrint")
 @Slf4j
 public class MesTransferOrderPrintController extends JeecgController<MesTransferOrderPrint, IMesTransferOrderPrintService> {
    @Autowired
diff --git a/src/main/java/org/jeecg/modules/mes/controller/MesWorkReportingController.java b/src/main/java/org/jeecg/modules/mes/controller/MesWorkReportingController.java
index cc373c6..e9b0225 100644
--- a/src/main/java/org/jeecg/modules/mes/controller/MesWorkReportingController.java
+++ b/src/main/java/org/jeecg/modules/mes/controller/MesWorkReportingController.java
@@ -29,7 +29,7 @@
 */
 @Api(tags="宸ュ崟鎶ュ伐")
 @RestController
-@RequestMapping("/mesworkreporting/mesWorkReporting")
+@RequestMapping("/mes/mesWorkReporting")
 @Slf4j
 public class MesWorkReportingController extends JeecgController<MesWorkReporting, IMesWorkReportingService> {
    @Autowired
diff --git a/src/main/java/org/jeecg/modules/mes/entity/MesMaterialLoading.java b/src/main/java/org/jeecg/modules/mes/entity/MesMaterialLoading.java
index 94e5eeb..32bd01b 100644
--- a/src/main/java/org/jeecg/modules/mes/entity/MesMaterialLoading.java
+++ b/src/main/java/org/jeecg/modules/mes/entity/MesMaterialLoading.java
@@ -12,6 +12,7 @@
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -85,11 +86,11 @@
 	/**鏁伴噺*/
 	@Excel(name = "鏁伴噺", width = 15)
     @ApiModelProperty(value = "鏁伴噺")
-    private Double quantity;
+    private BigDecimal quantity;
 	/**鍓╀綑鏁伴噺*/
 	@Excel(name = "鍓╀綑鏁伴噺", width = 15)
     @ApiModelProperty(value = "鍓╀綑鏁伴噺")
-    private Double remainingQuantity;
+    private BigDecimal remainingQuantity;
     @TableField(exist = false)
     @ApiModelProperty(value = "宸ュ崟鍙�")
     private String workOrderCode;
diff --git a/src/main/java/org/jeecg/modules/mes/entity/MesProductionWorkOrder.java b/src/main/java/org/jeecg/modules/mes/entity/MesProductionWorkOrder.java
index 252384d..a153d3a 100644
--- a/src/main/java/org/jeecg/modules/mes/entity/MesProductionWorkOrder.java
+++ b/src/main/java/org/jeecg/modules/mes/entity/MesProductionWorkOrder.java
@@ -116,6 +116,10 @@
 	@Excel(name = "瀹為檯鎶ュ伐鏁伴噺", width = 15)
     @ApiModelProperty(value = "瀹為檯鎶ュ伐鏁伴噺")
     private BigDecimal actualQuantity;
+    /**宸茬敓浜ф墭鏁帮紙褰撳墠鐝宸茬敓浜х殑鎵樻暟閲忥紝姣忔鎶ュ伐鏃舵洿鏂帮級*/
+    @Excel(name = "宸茬敓浜ф墭鏁�", width = 15)
+    @ApiModelProperty(value = "宸茬敓浜ф墭鏁�")
+    private Integer finishedPallets = 0;
 	/**鍙戝竷浜�*/
 	@Excel(name = "鍙戝竷浜�", width = 15)
     @ApiModelProperty(value = "鍙戝竷浜�")
diff --git a/src/main/java/org/jeecg/modules/mes/entity/MesWorkReporting.java b/src/main/java/org/jeecg/modules/mes/entity/MesWorkReporting.java
index d95a708..d281e7e 100644
--- a/src/main/java/org/jeecg/modules/mes/entity/MesWorkReporting.java
+++ b/src/main/java/org/jeecg/modules/mes/entity/MesWorkReporting.java
@@ -12,6 +12,7 @@
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -79,7 +80,7 @@
 	/**鏁伴噺*/
 	@Excel(name = "鏁伴噺", width = 15)
     @ApiModelProperty(value = "鏁伴噺")
-    private Double quantity;
+    private BigDecimal quantity;
 	/**鎶ュ伐浜�*/
 	@Excel(name = "鎶ュ伐浜�", width = 15)
     @ApiModelProperty(value = "鎶ュ伐浜�")
diff --git a/src/main/java/org/jeecg/modules/mes/service/impl/MesProductionWorkOrderServiceImpl.java b/src/main/java/org/jeecg/modules/mes/service/impl/MesProductionWorkOrderServiceImpl.java
index 2b407ff..0a788fb 100644
--- a/src/main/java/org/jeecg/modules/mes/service/impl/MesProductionWorkOrderServiceImpl.java
+++ b/src/main/java/org/jeecg/modules/mes/service/impl/MesProductionWorkOrderServiceImpl.java
@@ -77,6 +77,9 @@
                         .eq(ShiftGroup::getFactoryId, request.getFactoryId())
                         .eq(ShiftGroup::getDelFlag, CommonConstant.DEL_FLAG_0))
                 .stream().collect(Collectors.toMap(ShiftGroup::getShiftId, v1 -> v1, (v1, v2) -> v1));
+        if (shiftGroupMap.isEmpty()) {
+            throw new JeecgBootException("璇ヤ骇绾夸笅鏈缃彮缁勶紝鏃犳硶鎺掍骇锛�");
+        }
         Factory factory = factoryService.getById(request.getFactoryId());
         Map<String, Shift> shiftNameMap = new HashMap<>();
         List<Shift> shifts = shiftService.list(new LambdaQueryWrapper<Shift>()
diff --git a/src/main/java/org/jeecg/modules/mes/service/impl/MesWorkReportingServiceImpl.java b/src/main/java/org/jeecg/modules/mes/service/impl/MesWorkReportingServiceImpl.java
index 3dde504..271c5aa 100644
--- a/src/main/java/org/jeecg/modules/mes/service/impl/MesWorkReportingServiceImpl.java
+++ b/src/main/java/org/jeecg/modules/mes/service/impl/MesWorkReportingServiceImpl.java
@@ -1,35 +1,54 @@
 package org.jeecg.modules.mes.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.modules.base.entity.Factory;
 import org.jeecg.modules.base.entity.LineSideWarehouse;
 import org.jeecg.modules.base.entity.Shift;
+import org.jeecg.modules.base.entity.ShiftGroup;
 import org.jeecg.modules.base.service.IFactoryService;
 import org.jeecg.modules.base.service.ILineSideWarehouseService;
+import org.jeecg.modules.base.service.IShiftGroupService;
 import org.jeecg.modules.base.service.IShiftService;
 import org.jeecg.modules.lsw.entity.LswMaterial;
 import org.jeecg.modules.lsw.entity.LswMaterialInbound;
-import org.jeecg.modules.lsw.enums.MaterialCategory;
+import org.jeecg.modules.lsw.enums.MaterialCategoryEnum;
 import org.jeecg.modules.lsw.service.ILswMaterialInboundService;
 import org.jeecg.modules.lsw.service.ILswMaterialService;
+import org.jeecg.modules.mes.entity.MesMaterialLoading;
+import org.jeecg.modules.mes.entity.MesProductionOrder;
 import org.jeecg.modules.mes.entity.MesProductionWorkOrder;
 import org.jeecg.modules.mes.entity.MesWorkReporting;
 import org.jeecg.modules.mes.mapper.MesWorkReportingMapper;
+import org.jeecg.modules.mes.service.IMesMaterialLoadingService;
+import org.jeecg.modules.mes.service.IMesProductionOrderService;
 import org.jeecg.modules.mes.service.IMesProductionWorkOrderService;
 import org.jeecg.modules.mes.service.IMesWorkReportingService;
 import org.jeecg.modules.mes.utils.CommonUtils;
+import org.jeecg.modules.pms.entity.PmsMaterialProcess;
+import org.jeecg.modules.pms.service.IPmsMaterialProcessService;
+import org.jeecg.modules.pms.service.IPmsProcessBillMaterialsService;
+import org.jeecg.modules.pms.vo.ProcessBillMaterialsDetailVo;
+import org.jeecg.modules.sap.request.OrderLoadRequest;
+import org.jeecg.modules.sap.request.OrderReportRequest;
+import org.jeecg.modules.sap.service.OrderLoadService;
+import org.jeecg.modules.sap.service.OrderReportService;
 import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoField;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @Description: 宸ュ崟鎶ュ伐
@@ -37,11 +56,14 @@
  * @Date:   2025-07-04
  * @Version: V1.0
  */
+@Slf4j
 @Service
 public class MesWorkReportingServiceImpl extends ServiceImpl<MesWorkReportingMapper, MesWorkReporting> implements IMesWorkReportingService {
 
     @Autowired
     private IMesProductionWorkOrderService mesProductionWorkOrderService;
+    @Autowired
+    private IMesProductionOrderService mesProductionOrderService;
     @Autowired
     private ILswMaterialService lswMaterialService;
     @Autowired
@@ -49,11 +71,23 @@
     @Autowired
     private IShiftService shiftService;
     @Autowired
+    private IShiftGroupService shiftGroupService;
+    @Autowired
     private ILineSideWarehouseService lineSideWarehouseService;
     @Autowired
     private ILswMaterialInboundService lswMaterialInboundService;
     @Autowired
+    private IMesMaterialLoadingService mesMaterialLoadingService;
+    @Autowired
+    private IPmsProcessBillMaterialsService pmsProcessBillMaterialsService;
+    @Autowired
+    private IPmsMaterialProcessService pmsMaterialProcessService;
+    @Autowired
     private ISysBusinessCodeRuleService sysBusinessCodeRuleService;
+    @Autowired
+    private OrderReportService orderReportService;
+    @Autowired
+    private OrderLoadService orderLoadService;
 
     @Override
     public List<MesWorkReporting> queryWorkReportingByWorkOrderId(String workOrderId) {
@@ -66,6 +100,7 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void addReporting(MesWorkReporting mesWorkReporting) {
         MesProductionWorkOrder workOrder = mesProductionWorkOrderService.getById(mesWorkReporting.getWorkOrderId());
         if (workOrder == null) {
@@ -78,13 +113,11 @@
         if (material == null) {
             throw new JeecgBootException("鐗╂枡涓嶅瓨鍦紒");
         }
-        MaterialCategory materialCategory = MaterialCategory.fromName(material.getMaterialCategory());
+        MaterialCategoryEnum materialCategory = MaterialCategoryEnum.fromName(material.getMaterialCategory());
         if (materialCategory == null) {
             throw new JeecgBootException("鏈煡鐨勭墿鏂欑被鍨嬶紒");
         }
-        //鐢熶骇鎵规鍙�
-        String batchNumber = sysBusinessCodeRuleService.generateBusinessCodeSeq("WorkReportingBatchNumber");
-        mesWorkReporting.setBatchNumber(batchNumber);
+
         LineSideWarehouse lineSideWarehouse = lineSideWarehouseService.list(new LambdaQueryWrapper<LineSideWarehouse>()
                         .eq(LineSideWarehouse::getFactoryId, mesWorkReporting.getFactoryId())
                         .eq(LineSideWarehouse::getDelFlag, CommonConstant.DEL_FLAG_0))
@@ -92,44 +125,137 @@
         if (lineSideWarehouse == null) {
             throw new JeecgBootException("绾胯竟浠撳簱涓嶅瓨鍦紒");
         }
-        mesWorkReporting.setWarehouseId(lineSideWarehouse.getId());
-        mesWorkReporting.setReporter(Objects.requireNonNull(CommonUtils.getCurrentUser()).getUsername());
-        mesWorkReporting.setReportTime(new Date());
-        String date = DateUtil.format(new Date(), "yyMMdd");
+
+        //鐢熶骇鎵规鍙�
+        LocalDate today = LocalDate.now();
+        String yearLastTwo = today.format(DateTimeFormatter.ofPattern("yy"));
+        String dayOfYearStr = today.format(DateTimeFormatter.ofPattern("DDD"));
+        ShiftGroup shiftGroup = shiftGroupService.getById(workOrder.getGroupId());
+        int currentPallets = workOrder.getFinishedPallets() + 1;
+        String batchNumber = yearLastTwo + dayOfYearStr + shiftGroup.getGroupCode() + currentPallets;
+        mesWorkReporting.setBatchNumber(batchNumber)
+                .setWarehouseId(lineSideWarehouse.getId())
+                .setReporter(Objects.requireNonNull(CommonUtils.getCurrentUser()).getUsername())
+                .setReportTime(new Date());
+        String date = today.format(DateTimeFormatter.ofPattern("yyMMdd"));
+        Factory factory = factoryService.getById(mesWorkReporting.getFactoryId());
+        workOrder.setFactoryCode(factory.getFactoryCode());
         switch (materialCategory) {
-            case FINISHED:
-                //鎴愬搧鎶ュ伐閫昏緫
+            case FINISHED_PRODUCT:
+                //鎴愬搧鎶ュ伐
+                productReport(mesWorkReporting, workOrder, lineSideWarehouse);
+                //鎷兼帴鎴愬搧鎶ュ伐鎵樺彿
                 String palletNumber4 = sysBusinessCodeRuleService.generateBusinessCodeSeq("WorkReportingPalletNumber4");
                 String finishedPalletNumber = material.getMaterialNumber() + date + palletNumber4;
                 mesWorkReporting.setPalletNumber(finishedPalletNumber);
-                //todo 鎵e噺鍐呮硶鍏帮紙瀵瑰簲鏈哄姞鍐呮硶鍏扮嚎杈瑰簱锛夈�佸娉曞叞锛堝搴旀満鍔犲娉曞叞绾胯竟搴擄級銆佸皬鍐呭湀锛堝搴旇閰嶇嚎杈瑰簱锛夊簱瀛橈紝璋冪敤SAP鎶曟枡鎺ュ彛
-                //todo 璋冪敤SAP宸ュ簭鎶ュ伐
-                //todo 鎵撳嵃鎴愬搧鎵樻爣绛俱�佹楠屾爣璇嗗崱銆佺Щ搴撳崟銆佸畬宸ユ楠屽伐鍗曪紱鍒ゆ柇鐢熶骇璁㈠崟鏄惁闇�瑕佸叧闂紙鍚堟牸鏁伴噺 = 璁㈠崟鏁伴噺锛�
+                //todo 鎵撳嵃鎴愬搧鎵樻爣绛俱�佹楠屾爣璇嗗崱銆佺Щ搴撳崟銆佸畬宸ユ楠屽伐鍗�
                 break;
-            case HALF:
-            case RAW:
-                //鍗婃垚鍝佹姤宸ラ�昏緫
-                Factory factory = factoryService.getById(mesWorkReporting.getFactoryId());
+            case INNER_FLANGE:
+            case OUTER_FLANGE:
+                //鍗婃垚鍝�(鍐呮硶鍏般�佸娉曞叞)鎶ュ伐
+                productReport(mesWorkReporting, workOrder, lineSideWarehouse);
+                //鎷兼帴鍗婃垚鍝佹姤宸ユ墭鍙�
                 Shift shift = shiftService.getById(workOrder.getShiftId());
                 String palletNumber6 = sysBusinessCodeRuleService.generateBusinessCodeSeq("WorkReportingPalletNumber6");
-                //鎷兼帴鍗婃垚鍝佹姤宸ユ墭鍙�
                 String halfPalletNumber = factory.getFactoryCode() + material.getMaterialNumber() + date + shift.getShiftCode() + palletNumber6;
                 mesWorkReporting.setPalletNumber(halfPalletNumber);
-                //todo 鎵e噺瀵瑰簲绾胯竟搴擄紙澶栨硶鍏版瘺鍧�佸唴娉曞叞姣涘澂锛夊簱瀛樺悗锛岃皟鐢⊿AP鎶曟枡鎺ュ彛
-                //todo 璋冪敤SAP宸ュ簭鎶ュ伐
-                break;
-            case PARTS:
                 break;
         }
+        //鏂板鎶ュ伐璁板綍
         save(mesWorkReporting);
-        //绾胯竟搴撳叆搴撻�昏緫
-        LswMaterialInbound lswMaterialInbound = new LswMaterialInbound()
-                .setFactoryId(mesWorkReporting.getFactoryId())
-                .setMaterialNumber(material.getMaterialNumber())
-                .setMaterialName(material.getMaterialName())
-                .setBatchNumber(batchNumber)
-                .setQuantity(mesWorkReporting.getQuantity())
-                .setWarehouseId(lineSideWarehouse.getId());
-        lswMaterialInboundService.save(lswMaterialInbound);
+        //鏇存柊鎺掍骇宸ュ崟
+        MesProductionWorkOrder productionWorkUpdateOrder = new MesProductionWorkOrder()
+                .setId(workOrder.getId())
+                .setActualQuantity(workOrder.getActualQuantity().add(mesWorkReporting.getQuantity()))
+                .setFinishedPallets(workOrder.getFinishedPallets() + 1);
+        mesProductionWorkOrderService.updateById(productionWorkUpdateOrder);
+    }
+
+    //鍗婃垚鍝�(鍐呮硶鍏般�佸娉曞叞)銆佹垚鍝佹姤宸�
+    private void productReport(MesWorkReporting mesWorkReporting, MesProductionWorkOrder workOrder, LineSideWarehouse lineSideWarehouse) {
+        //1銆佸叆搴� 鍗婃垚鍝�/鎴愬搧 鍒板搴旂嚎杈瑰簱
+        LswMaterialInbound materialInbound = new LswMaterialInbound()
+                .setFactoryId(workOrder.getFactoryId())
+                .setWarehouseId(lineSideWarehouse.getId())
+                .setMaterialNumber(workOrder.getMaterialNumber())
+                .setMaterialName(workOrder.getMaterialName())
+                .setBatchNumber(mesWorkReporting.getBatchNumber())
+                .setQuantity(mesWorkReporting.getQuantity());
+        lswMaterialInboundService.save(materialInbound);
+        //2銆佹墸鍑忎娇鐢ㄦ瘺鍧簱瀛橈紙鏇存柊涓婃枡璁板綍锛夋垨鍗婃垚鍝佺墿鏂欏簱瀛橈紙鍐呮硶鍏般�佸娉曞叞銆佸皬鍐呭湀銆侀厤浠剁瓑锛夛紝鎸夌収 鎺掍骇宸ュ崟id銆佺墿鏂欑紪鐮� 鏌ヨ涓婃枡璁板綍锛屾寜鐓ф椂闂翠粠鏃╁埌鏅氭帓搴忥紝浼樺厛鎵e噺鏃╃殑涓婃枡璁板綍锛堝厛杩涘厛鍑猴級
+        //鍏堟煡璇㈢墿鏂� BOM
+        Map<String, ProcessBillMaterialsDetailVo> processBillMaterialsDetailMap = pmsProcessBillMaterialsService
+                .queryMaterialsDetailByOrderIdAndMaterialNumber(mesWorkReporting.getOrderId(), workOrder.getMaterialNumber()).stream()
+                .collect(Collectors.toMap(ProcessBillMaterialsDetailVo::getMaterialNumber, v1 -> v1, (v1, v2) -> v1));
+        //鏌ヨ涓婃枡璁板綍
+        Map<String, List<MesMaterialLoading>> materialLoadingRecordMap = mesMaterialLoadingService.list(new LambdaQueryWrapper<MesMaterialLoading>()
+                        .eq(MesMaterialLoading::getWorkOrderId, workOrder.getId())
+                        .in(MesMaterialLoading::getMaterialNumber, processBillMaterialsDetailMap.keySet())
+                        .gt(MesMaterialLoading::getRemainingQuantity, BigDecimal.ZERO)).stream()
+                .sorted(Comparator.comparing(MesMaterialLoading::getCreateTime))
+                .collect(Collectors.groupingBy(MesMaterialLoading::getMaterialNumber));
+        List<MesMaterialLoading> materialLoadingRecordUpdateList = CollectionUtil.newArrayList();
+        for (String materialNumber : processBillMaterialsDetailMap.keySet()) {
+            List<MesMaterialLoading> materialLoadingRecordList = materialLoadingRecordMap.get(materialNumber);
+            if (materialLoadingRecordList.isEmpty()) {
+                throw new JeecgBootException("鏈煡璇㈠埌鐩稿簲鐗╂枡鐨勪笂鏂欒褰曪紒");
+            }
+            //璁$畻鐗╂枡鎵e噺鏁伴噺
+            ProcessBillMaterialsDetailVo processBillMaterialsDetailVo = processBillMaterialsDetailMap.get(materialNumber);
+            BigDecimal quantity = processBillMaterialsDetailVo.getPerQuantity().multiply(mesWorkReporting.getQuantity());
+            List<MesMaterialLoading> updateList = deductQuantity(materialLoadingRecordList, quantity);
+            materialLoadingRecordUpdateList.addAll(updateList);
+        }
+        //鏇存柊涓婃枡璁板綍
+        mesMaterialLoadingService.updateBatchById(materialLoadingRecordUpdateList);
+        MesProductionOrder productionOrder = mesProductionOrderService.getById(mesWorkReporting.getOrderId());
+        //3銆佽皟鐢⊿AP鎶曟枡鎺ュ彛锛堟秷鑰楃殑鐗╂枡锛� OrderLoadService
+        for (String materialNumber : processBillMaterialsDetailMap.keySet()) {
+            ProcessBillMaterialsDetailVo processBillMaterialsDetailVo = processBillMaterialsDetailMap.get(materialNumber);
+            OrderLoadRequest loadRequest = new OrderLoadRequest()
+                    .setOrderCode(productionOrder.getOrderCode())
+                    .setFactoryCode(workOrder.getFactoryCode())
+                    .setMaterialNumber(materialNumber)
+                    .setWarehouseCode(lineSideWarehouse.getWarehouseCode())
+                    .setQuantity(processBillMaterialsDetailVo.getPerQuantity().multiply(mesWorkReporting.getQuantity()))
+                    .setBatchNumber(mesWorkReporting.getBatchNumber())
+                    .setProductionUnit(processBillMaterialsDetailVo.getProductionUnit());
+            try {
+                orderLoadService.productionOrderLoad(loadRequest);
+            } catch (Exception e) {
+                log.error("SAP鐢熶骇璁㈠崟鎶曟枡寮傚父锛�", e);
+            }
+        }
+        //4銆佽皟鐢⊿AP宸ュ簭鎶ュ伐锛堟牴鎹敓浜ц鍗昳d鏌ヨ瀵瑰簲鐨勭墿鏂欏伐搴忥紙鍗婃垚鍝佹槸澶氫釜宸ュ簭锛屾垚鍝佸彧鏈変竴涓伐搴忥級锛屾寜鐓у伐搴忓彿浠庡皬鍒板ぇ渚濇鎸ㄤ釜鎶ュ伐锛涚洰鍓嶈�冭檻寮傛鎵ц锛� OrderReportService
+        List<PmsMaterialProcess> processList = pmsMaterialProcessService.list(new LambdaQueryWrapper<PmsMaterialProcess>()
+                .eq(PmsMaterialProcess::getOrderId, mesWorkReporting.getOrderId())
+                .orderByAsc(PmsMaterialProcess::getProcessCode));
+        for (PmsMaterialProcess process : processList) {
+            OrderReportRequest reportRequest = new OrderReportRequest()
+                    .setOrderCode(productionOrder.getOrderCode())
+                    .setFactoryCode(workOrder.getFactoryCode())
+                    .setProcessCode(process.getProcessCode())
+                    .setQualifiedQuantity(mesWorkReporting.getQuantity())
+                    .setWarehouseCode(lineSideWarehouse.getWarehouseCode())
+                    .setBatchNumber(mesWorkReporting.getBatchNumber());
+            try {
+                orderReportService.productionOrderReport(reportRequest);
+            } catch (Exception e) {
+                log.error("SAP宸ュ簭鎶ュ伐寮傚父锛�", e);
+            }
+        }
+    }
+
+    private List<MesMaterialLoading> deductQuantity(List<MesMaterialLoading> materialLoadingRecordList, BigDecimal quantity) {
+        for (MesMaterialLoading mesMaterialLoading : materialLoadingRecordList) {
+            if (mesMaterialLoading.getRemainingQuantity().compareTo(quantity) >= 0) {
+                mesMaterialLoading.setRemainingQuantity(mesMaterialLoading.getRemainingQuantity().subtract(quantity));
+                break;
+            } else {
+                quantity = quantity.subtract(mesMaterialLoading.getRemainingQuantity());
+                mesMaterialLoading.setRemainingQuantity(BigDecimal.ZERO);
+            }
+        }
+        return materialLoadingRecordList;
     }
 }
diff --git a/src/main/java/org/jeecg/modules/pms/service/IPmsProcessBillMaterialsService.java b/src/main/java/org/jeecg/modules/pms/service/IPmsProcessBillMaterialsService.java
index 8f4cfb3..6c63fa7 100644
--- a/src/main/java/org/jeecg/modules/pms/service/IPmsProcessBillMaterialsService.java
+++ b/src/main/java/org/jeecg/modules/pms/service/IPmsProcessBillMaterialsService.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.jeecg.modules.mes.entity.MesProductionOrder;
 import org.jeecg.modules.pms.entity.PmsProcessBillMaterials;
+import org.jeecg.modules.pms.vo.ProcessBillMaterialsDetailVo;
 import org.jeecg.modules.sap.dto.OrderBomDTO;
 
 import java.util.List;
@@ -39,4 +40,6 @@
      * @return
      */
     IPage<PmsProcessBillMaterials> queryPageList(Page<PmsProcessBillMaterials> page, PmsProcessBillMaterials query);
+
+    List<ProcessBillMaterialsDetailVo> queryMaterialsDetailByOrderIdAndMaterialNumber(String orderId, String materialNumber);
 }
diff --git a/src/main/java/org/jeecg/modules/pms/service/impl/PmsProcessBillMaterialsServiceImpl.java b/src/main/java/org/jeecg/modules/pms/service/impl/PmsProcessBillMaterialsServiceImpl.java
index ec90412..dc6a157 100644
--- a/src/main/java/org/jeecg/modules/pms/service/impl/PmsProcessBillMaterialsServiceImpl.java
+++ b/src/main/java/org/jeecg/modules/pms/service/impl/PmsProcessBillMaterialsServiceImpl.java
@@ -7,16 +7,21 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.commons.lang3.StringUtils;
+import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.modules.mes.entity.MesProductionOrder;
 import org.jeecg.modules.pms.entity.PmsProcessBillMaterials;
+import org.jeecg.modules.pms.entity.PmsProcessBillMaterialsDetail;
 import org.jeecg.modules.pms.mapper.PmsProcessBillMaterialsMapper;
 import org.jeecg.modules.pms.service.IPmsProcessBillMaterialsDetailService;
 import org.jeecg.modules.pms.service.IPmsProcessBillMaterialsService;
+import org.jeecg.modules.pms.vo.ProcessBillMaterialsDetailVo;
 import org.jeecg.modules.sap.dto.OrderBomDTO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.RoundingMode;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -98,4 +103,29 @@
         }
         return this.getBaseMapper().queryPageList(page, queryWrapper);
     }
+
+    @Override
+    public List<ProcessBillMaterialsDetailVo> queryMaterialsDetailByOrderIdAndMaterialNumber(String orderId, String materialNumber) {
+        //鏍规嵁鐢熶骇璁㈠崟id鍜岀墿鏂欑紪鐮佹煡璇㈣鍗旴OM
+        PmsProcessBillMaterials processBillMaterials = list(new LambdaQueryWrapper<PmsProcessBillMaterials>()
+                        .eq(PmsProcessBillMaterials::getOrderId, orderId)
+                        .eq(PmsProcessBillMaterials::getMaterialNumber, materialNumber))
+                .stream().findFirst().orElse(null);
+        if (processBillMaterials == null) {
+            throw new JeecgBootException("鏈壘鍒颁笌璇ョ墿鏂欏叧鑱旂殑璁㈠崟BOM锛�");
+        }
+        //鏌ヨ璁㈠崟BOM鏄庣粏
+        List<PmsProcessBillMaterialsDetail> processBillMaterialsDetails = processBillMaterialsDetailService.queryByMaterialId(processBillMaterials.getId());
+        List<ProcessBillMaterialsDetailVo> billMaterialsDetailList = CollectionUtil.newArrayList();
+        for (PmsProcessBillMaterialsDetail processBillMaterialsDetail : processBillMaterialsDetails) {
+            ProcessBillMaterialsDetailVo processBillMaterialsDetailVo = new ProcessBillMaterialsDetailVo()
+                    .setMaterialNumber(processBillMaterialsDetail.getMaterialNumber())
+                    .setMaterialName(processBillMaterialsDetail.getMaterialName())
+                    .setProductionUnit(processBillMaterialsDetail.getProductionUnit())
+                    .setPerQuantity(processBillMaterialsDetail.getUsageQuantity()
+                            .divide(processBillMaterials.getProductionQuantity(), 2, RoundingMode.HALF_UP));
+            billMaterialsDetailList.add(processBillMaterialsDetailVo);
+        }
+        return billMaterialsDetailList;
+    }
 }
diff --git a/src/main/java/org/jeecg/modules/pms/vo/ProcessBillMaterialsDetailVo.java b/src/main/java/org/jeecg/modules/pms/vo/ProcessBillMaterialsDetailVo.java
new file mode 100644
index 0000000..58a60db
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/pms/vo/ProcessBillMaterialsDetailVo.java
@@ -0,0 +1,33 @@
+package org.jeecg.modules.pms.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @Description: 鐗╂枡娓呭崟
+ * @Author: jeecg-boot
+ * @Date:   2025-07-01
+ * @Version: V1.0
+ */
+@Data
+@Accessors(chain = true)
+public class ProcessBillMaterialsDetailVo implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**鐗╂枡缂栫爜*/
+    @ApiModelProperty(value = "鐗╂枡缂栫爜")
+    private String materialNumber;
+	/**鐗╂枡鍚嶇О*/
+    @ApiModelProperty(value = "鐗╂枡鍚嶇О")
+    private String materialName;
+    /**鍩烘湰鍗曚綅*/
+    @ApiModelProperty(value = "鍩烘湰鍗曚綅")
+    private String productionUnit;
+	/**闇�姹傜敤閲�*/
+    @ApiModelProperty(value = "鍗曚綅鐢ㄩ噺锛堝姞宸�1浠剁殑鐢ㄩ噺锛�")
+    private BigDecimal perQuantity;
+
+}
diff --git a/src/main/java/org/jeecg/modules/sap/request/OrderLoadRequest.java b/src/main/java/org/jeecg/modules/sap/request/OrderLoadRequest.java
index af72a18..b85318d 100644
--- a/src/main/java/org/jeecg/modules/sap/request/OrderLoadRequest.java
+++ b/src/main/java/org/jeecg/modules/sap/request/OrderLoadRequest.java
@@ -1,6 +1,7 @@
 package org.jeecg.modules.sap.request;
 
 import lombok.Data;
+import lombok.experimental.Accessors;
 
 import java.math.BigDecimal;
 
@@ -8,6 +9,7 @@
  * 鎶曟枡璇锋眰鍙傛暟
  */
 @Data
+@Accessors(chain = true)
 public class OrderLoadRequest {
     /** MATNR 鐗╂枡鍙� */
     private String materialNumber;
diff --git a/src/main/java/org/jeecg/modules/sap/request/OrderReportRequest.java b/src/main/java/org/jeecg/modules/sap/request/OrderReportRequest.java
index 54281b5..1545d4f 100644
--- a/src/main/java/org/jeecg/modules/sap/request/OrderReportRequest.java
+++ b/src/main/java/org/jeecg/modules/sap/request/OrderReportRequest.java
@@ -1,6 +1,7 @@
 package org.jeecg.modules.sap.request;
 
 import lombok.Data;
+import lombok.experimental.Accessors;
 
 import java.math.BigDecimal;
 
@@ -9,6 +10,7 @@
  * 璇锋眰绫�
  */
 @Data
+@Accessors(chain = true)
 public class OrderReportRequest {
     /** I_WERKS 宸ュ巶 */
     private String factoryCode;
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index c91a985..c83b1ec 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -284,6 +284,7 @@
       agent-id: ??
 webservice:
   url: http://10.101.0.182:8002/MesWebService/WebService.asmx?wsdl
+  namespace: http://tempuri.org/
 # SAP RFC鏂瑰紡鎺ュ彛闆嗘垚
 sap:
   rfc:

--
Gitblit v1.9.3