From bb923868d80b31d1057424a28b4bd7709c5a6648 Mon Sep 17 00:00:00 2001
From: lixiangyu <lixiangyu@xalxzn.com>
Date: 星期四, 11 九月 2025 17:57:57 +0800
Subject: [PATCH] feat(cms): - 在`CuttingInventoryServiceImpl`中添加了批量更新库存状态的方法,并添加了事务注解。 - 在`CuttingReceive`实体类中添加了领用单对库存状态变化功能 - 在`CuttingReceiveController`中添加了提交领用单的方法,并优化了部分方法的参数和逻辑。 - 在`CuttingReceiveDetailMapper.xml`中添加了库存ID字段,以让数据库能正常获取库存id。 - 在`CuttingReceiveServiceImpl`中实现了提交领用单的逻辑,并添加了日志记录。- 在`ICuttingInventoryService`接口中添加了批量更新库存状态的方法。 - 在`ICuttingReceiveService`接口中添加了提交领用单的方法。

---
 src/main/java/org/jeecg/modules/cms/service/impl/CuttingInventoryServiceImpl.java |   19 +++-
 src/main/java/org/jeecg/modules/cms/service/impl/CuttingReceiveServiceImpl.java   |   65 ++++++++++++++++
 src/main/java/org/jeecg/modules/cms/entity/CuttingReceive.java                    |    1 
 src/main/java/org/jeecg/modules/cms/service/impl/CuttingInboundServiceImpl.java   |   11 +-
 src/main/java/org/jeecg/modules/cms/mapper/xml/CuttingReceiveDetailMapper.xml     |    3 
 src/main/java/org/jeecg/modules/cms/service/ICuttingReceiveService.java           |    2 
 src/main/java/org/jeecg/modules/cms/controller/CuttingReceiveController.java      |   81 +++++++++-----------
 src/main/java/org/jeecg/modules/cms/service/ICuttingInventoryService.java         |    1 
 src/main/java/org/jeecg/modules/cms/controller/CuttingInventoryController.java    |    5 
 9 files changed, 130 insertions(+), 58 deletions(-)

diff --git a/src/main/java/org/jeecg/modules/cms/controller/CuttingInventoryController.java b/src/main/java/org/jeecg/modules/cms/controller/CuttingInventoryController.java
index a0e4d74..396546f 100644
--- a/src/main/java/org/jeecg/modules/cms/controller/CuttingInventoryController.java
+++ b/src/main/java/org/jeecg/modules/cms/controller/CuttingInventoryController.java
@@ -1,8 +1,7 @@
 package org.jeecg.modules.cms.controller;
 
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
diff --git a/src/main/java/org/jeecg/modules/cms/controller/CuttingReceiveController.java b/src/main/java/org/jeecg/modules/cms/controller/CuttingReceiveController.java
index a1be185..35302fe 100644
--- a/src/main/java/org/jeecg/modules/cms/controller/CuttingReceiveController.java
+++ b/src/main/java/org/jeecg/modules/cms/controller/CuttingReceiveController.java
@@ -3,6 +3,7 @@
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
@@ -12,6 +13,7 @@
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import io.micrometer.core.annotation.Timed;
 import liquibase.pro.packaged.G;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.query.QueryGenerator;
@@ -43,10 +45,10 @@
 import org.jeecg.common.aspect.annotation.AutoLog;
 
 /**
- * @Description: 鍒�鍏烽鐢ㄥ崟
- * @Author: jeecg-boot
- * @Date: 2025-07-28
- * @Version: V1.0
+ * &#064;Description:  鍒�鍏烽鐢ㄥ崟
+ * &#064;Author:  jeecg-boot
+ * &#064;Date:  2025-07-28
+ * &#064;Version:  V1.0
  */
 @Api(tags = "鍒�鍏烽鐢ㄥ崟")
 @RestController
@@ -58,14 +60,12 @@
 
     @Autowired
     private ICuttingReceiveDetailService cuttingReceiveDetailService;
+
+    @Autowired
+    private ICuttingInventoryService cuttingInventoryService;
+
     /**
      * 鍒嗛〉鍒楄〃鏌ヨ
-     *
-     * @param cuttingReceive
-     * @param pageNo
-     * @param pageSize
-     * @param req
-     * @return
      */
     //@AutoLog(value = "鍒�鍏烽鐢ㄥ崟-鍒嗛〉鍒楄〃鏌ヨ")
     @ApiOperation(value = "鍒�鍏烽鐢ㄥ崟-鍒嗛〉鍒楄〃鏌ヨ", notes = "鍒�鍏烽鐢ㄥ崟-鍒嗛〉鍒楄〃鏌ヨ")
@@ -75,16 +75,13 @@
                                                        @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
                                                        HttpServletRequest req) {
         QueryWrapper<CuttingReceive> queryWrapper = QueryGenerator.initQueryWrapper(cuttingReceive, req.getParameterMap());
-        Page<CuttingReceive> page = new Page<CuttingReceive>(pageNo, pageSize);
+        Page<CuttingReceive> page = new Page<>(pageNo, pageSize);
         IPage<CuttingReceive> pageList = cuttingReceiveService.page(page, queryWrapper);
         return Result.OK(pageList);
     }
 
     /**
      * 娣诲姞
-     *
-     * @param jSONObject
-     * @return
      */
     @AutoLog(value = "鍒�鍏烽鐢ㄥ崟-娣诲姞")
     @ApiOperation(value = "鍒�鍏烽鐢ㄥ崟-娣诲姞", notes = "鍒�鍏烽鐢ㄥ崟-娣诲姞")
@@ -99,23 +96,32 @@
         // 鍒犻櫎鍘熸湁鍏宠仈鐨勬槑缁嗘暟鎹�
         List<CuttingReceiveDetail> cuttingReceiveDetailList = cuttingReceiveDetailService.lambdaQuery().eq(CuttingReceiveDetail::getOrderId, cuttingReceive.getId()).list();
         cuttingReceiveDetailService.removeBatchByIds(cuttingReceiveDetailList);
-
         // 閲嶆柊娣诲姞鏂扮殑鏄庣粏鏁版嵁
         JSONArray jsonArray = jSONObject.getJSONArray("detailData");
         List<CuttingReceiveDetail> list = jsonArray.toJavaList(CuttingReceiveDetail.class);
-        for (int i = 0; i < list.size(); i++) {
-            CuttingReceiveDetail temp = list.get(i);
+        for (CuttingReceiveDetail temp : list) {
             temp.setOrderId(cuttingReceive.getId());
             cuttingReceiveDetailService.save(temp);
         }
+        // 鏇存柊搴撳瓨鍒�鍏风姸鎬佷负"宸插嚭搴�"
+        if (!list.isEmpty()) {
+            // 鏀堕泦鎵�鏈夐渶瑕佹洿鏂扮姸鎬佺殑搴撳瓨ID
+            List<String> inventoryIds = list.stream()
+                    .map(CuttingReceiveDetail::getInventoryId) // 鍋囪CuttingReceiveDetail涓湁inventoryId瀛楁
+                    .filter(id -> id != null && !id.isEmpty())
+                    .collect(Collectors.toList());
+
+            if (!inventoryIds.isEmpty()) {
+                // 鏇存柊搴撳瓨鐘舵�佷负"宸插嚭搴�"
+                cuttingInventoryService.updateStatus(inventoryIds, "寰呭嚭搴�");
+            }
+        }
+
         return Result.OK("娣诲姞鎴愬姛锛�");
     }
 
     /**
      * 缂栬緫
-     *
-     * @param cuttingReceive
-     * @return
      */
     @AutoLog(value = "鍒�鍏烽鐢ㄥ崟-缂栬緫")
     @ApiOperation(value = "鍒�鍏烽鐢ㄥ崟-缂栬緫", notes = "鍒�鍏烽鐢ㄥ崟-缂栬緫")
@@ -128,44 +134,35 @@
 
     /**
      * 閫氳繃id鍒犻櫎
-     *
-     * @param id
-     * @return
      */
     @AutoLog(value = "鍒�鍏烽鐢ㄥ崟-閫氳繃id鍒犻櫎")
     @ApiOperation(value = "鍒�鍏烽鐢ㄥ崟-閫氳繃id鍒犻櫎", notes = "鍒�鍏烽鐢ㄥ崟-閫氳繃id鍒犻櫎")
     //@RequiresPermissions("org.jeecg.modules:cms_cutting_receive:delete")
     @DeleteMapping(value = "/delete")
-    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+    public Result<String> delete(@RequestParam(name = "id") String id) {
         cuttingReceiveService.removeById(id);
         return Result.OK("鍒犻櫎鎴愬姛!");
     }
 
     /**
      * 鎵归噺鍒犻櫎
-     *
-     * @param ids
-     * @return
      */
     @AutoLog(value = "鍒�鍏烽鐢ㄥ崟-鎵归噺鍒犻櫎")
     @ApiOperation(value = "鍒�鍏烽鐢ㄥ崟-鎵归噺鍒犻櫎", notes = "鍒�鍏烽鐢ㄥ崟-鎵归噺鍒犻櫎")
     //@RequiresPermissions("org.jeecg.modules:cms_cutting_receive:deleteBatch")
     @DeleteMapping(value = "/deleteBatch")
-    public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+    public Result<String> deleteBatch(@RequestParam(name = "ids") String ids) {
         this.cuttingReceiveService.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<CuttingReceive> queryById(@RequestParam(name = "id", required = true) String id) {
+    public Result<CuttingReceive> queryById(@RequestParam(name = "id") String id) {
         CuttingReceive cuttingReceive = cuttingReceiveService.getById(id);
         if (cuttingReceive == null) {
             return Result.error("鏈壘鍒板搴旀暟鎹�");
@@ -175,9 +172,6 @@
 
     /**
      * 瀵煎嚭excel
-     *
-     * @param request
-     * @param cuttingReceive
      */
     //@RequiresPermissions("org.jeecg.modules:cms_cutting_receive:exportXls")
     @RequestMapping(value = "/exportXls")
@@ -187,10 +181,6 @@
 
     /**
      * 閫氳繃excel瀵煎叆鏁版嵁
-     *
-     * @param request
-     * @param response
-     * @return
      */
     //@RequiresPermissions("cms_cutting_receive:importExcel")
     @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
@@ -200,9 +190,6 @@
 
     /**
      * 鏍规嵁棰嗙敤id鏌ヨ棰嗙敤鏄庣粏
-     *
-     * @param orderId
-     * @return
      */
     @GetMapping("/detailList")
     public Result<?> detailList(@RequestParam("orderId") String orderId) {
@@ -212,8 +199,6 @@
 
     /**
      * 閫夋嫨搴撳瓨鍒�鍏风殑鍒楄〃
-     *
-     * @return
      */
     @GetMapping("/getInventoryToolList")
     public Result<?> getInventoryToolList(@RequestParam("pageNo") Integer pageNo,
@@ -222,4 +207,12 @@
         IPage<Map<String, Object>> inventoryTooList = cuttingReceiveService.getInventoryToolList(pageNo, pageSize, params);
         return Result.ok(inventoryTooList);
     }
+
+    @GetMapping("/submit")
+    @Timed(value = "cutting.inbound.submit", description = "鍒�鍏峰叆搴撴彁浜よ�楁椂")
+    public Result<?> submit(@RequestParam("orderId") String orderId) {
+        return cuttingReceiveService.submit(orderId);
+    }
+
+    //TODO: @GetMapping("/handleBack")
 }
diff --git a/src/main/java/org/jeecg/modules/cms/entity/CuttingReceive.java b/src/main/java/org/jeecg/modules/cms/entity/CuttingReceive.java
index c0e3ad6..d362d02 100644
--- a/src/main/java/org/jeecg/modules/cms/entity/CuttingReceive.java
+++ b/src/main/java/org/jeecg/modules/cms/entity/CuttingReceive.java
@@ -59,6 +59,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/cms/mapper/xml/CuttingReceiveDetailMapper.xml b/src/main/java/org/jeecg/modules/cms/mapper/xml/CuttingReceiveDetailMapper.xml
index 643a8fc..1211c04 100644
--- a/src/main/java/org/jeecg/modules/cms/mapper/xml/CuttingReceiveDetailMapper.xml
+++ b/src/main/java/org/jeecg/modules/cms/mapper/xml/CuttingReceiveDetailMapper.xml
@@ -9,9 +9,10 @@
             t1.cutting_id cuttingId,
             t1.workpiece_material workpieceMaterial,
             t1.used_life usedLife,
-            t2.cutting_barcode cuttingCBarcode,
+            t2.cutting_barcode cuttingBarcode,
             t2.inventory_status inventoryStatus,
             t2.current_life currentLife,
+            t2.id inventoryId,
             t3.cutting_code cuttingCode,
             t3.cutting_name cuttingName
         FROM
diff --git a/src/main/java/org/jeecg/modules/cms/service/ICuttingInventoryService.java b/src/main/java/org/jeecg/modules/cms/service/ICuttingInventoryService.java
index 5c4098a..875a21f 100644
--- a/src/main/java/org/jeecg/modules/cms/service/ICuttingInventoryService.java
+++ b/src/main/java/org/jeecg/modules/cms/service/ICuttingInventoryService.java
@@ -17,5 +17,6 @@
 public interface ICuttingInventoryService extends IService<CuttingInventory> {
 
     IPage<Map<String, Object>> statisticsByCuttingIdAndStatus(Page<Map<String, Object>> page);
+    void updateStatus(List<String> ids, String status);
 
 }
diff --git a/src/main/java/org/jeecg/modules/cms/service/ICuttingReceiveService.java b/src/main/java/org/jeecg/modules/cms/service/ICuttingReceiveService.java
index 1e69198..5b9df57 100644
--- a/src/main/java/org/jeecg/modules/cms/service/ICuttingReceiveService.java
+++ b/src/main/java/org/jeecg/modules/cms/service/ICuttingReceiveService.java
@@ -1,6 +1,7 @@
 package org.jeecg.modules.cms.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.cms.entity.CuttingReceive;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -15,4 +16,5 @@
 public interface ICuttingReceiveService extends IService<CuttingReceive> {
 
     IPage<Map<String, Object>> getInventoryToolList(Integer pageNo, Integer pageSize, Map<String, Object> params);
+    Result<?> submit(String orderId);
 }
diff --git a/src/main/java/org/jeecg/modules/cms/service/impl/CuttingInboundServiceImpl.java b/src/main/java/org/jeecg/modules/cms/service/impl/CuttingInboundServiceImpl.java
index 17ded30..18a80ad 100644
--- a/src/main/java/org/jeecg/modules/cms/service/impl/CuttingInboundServiceImpl.java
+++ b/src/main/java/org/jeecg/modules/cms/service/impl/CuttingInboundServiceImpl.java
@@ -89,6 +89,13 @@
         // 鏉$爜鐢熸垚瑙勫垯绀轰緥锛氬垁鍏稩D + 搴忓彿(4浣�) + 闅忔満鏁�
         return cuttingId + String.format("%04d", index + 1) + (int) (Math.random() * 10000);
     }
+
+    /**
+     * 鎻愪氦鍏ュ簱鍗�
+     *
+     * @param orderId 鍏ュ簱鍗旾D
+     * @return 鎻愪氦缁撴灉
+     */
     @Override
     @Timed(value = "cutting.inbound.submit", description = "鍒�鍏峰叆搴撴彁浜よ�楁椂")
     public synchronized Result<?> submit(String orderId) {
@@ -160,8 +167,4 @@
             return Result.error("鎻愪氦澶辫触: " + e.getMessage());
         }
     }
-
-
-
-
 }
diff --git a/src/main/java/org/jeecg/modules/cms/service/impl/CuttingInventoryServiceImpl.java b/src/main/java/org/jeecg/modules/cms/service/impl/CuttingInventoryServiceImpl.java
index f5adc82..6443d88 100644
--- a/src/main/java/org/jeecg/modules/cms/service/impl/CuttingInventoryServiceImpl.java
+++ b/src/main/java/org/jeecg/modules/cms/service/impl/CuttingInventoryServiceImpl.java
@@ -1,21 +1,19 @@
 package org.jeecg.modules.cms.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.jeecg.modules.cms.entity.CuttingInventory;
 import org.jeecg.modules.cms.mapper.CuttingInventoryMapper;
-import org.jeecg.modules.cms.mapper.CuttingToolMapper;
 import org.jeecg.modules.cms.service.ICuttingInventoryService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.stream.Collectors;
 
 /**
  * @Description: 鍒�鍏峰簱瀛�
@@ -30,4 +28,15 @@
         IPage<Map<String, Object>> result = baseMapper.statisticsByCuttingIdAndStatus(page);
         return result;
     }
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateStatus(List<String> ids, String status) {
+        if (ids != null && !ids.isEmpty() && StringUtils.isNotBlank(status)) {
+            UpdateWrapper<CuttingInventory> updateWrapper = new UpdateWrapper<>();
+            updateWrapper.in("id", ids);
+            updateWrapper.set("inventory_status", status); // 鏍规嵁瀹為檯鏁版嵁搴撳瓧娈靛悕璋冩暣
+            this.update(updateWrapper);
+        }
+    }
+
 }
diff --git a/src/main/java/org/jeecg/modules/cms/service/impl/CuttingReceiveServiceImpl.java b/src/main/java/org/jeecg/modules/cms/service/impl/CuttingReceiveServiceImpl.java
index b385d79..5ec91bd 100644
--- a/src/main/java/org/jeecg/modules/cms/service/impl/CuttingReceiveServiceImpl.java
+++ b/src/main/java/org/jeecg/modules/cms/service/impl/CuttingReceiveServiceImpl.java
@@ -2,13 +2,22 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.micrometer.core.annotation.Timed;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.cms.entity.CuttingReceive;
+import org.jeecg.modules.cms.entity.CuttingReceiveDetail;
 import org.jeecg.modules.cms.mapper.CuttingReceiveMapper;
+import org.jeecg.modules.cms.service.ICuttingInventoryService;
+import org.jeecg.modules.cms.service.ICuttingReceiveDetailService;
 import org.jeecg.modules.cms.service.ICuttingReceiveService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -17,12 +26,66 @@
  * @Date:   2025-07-28
  * @Version: V1.0
  */
+@Slf4j
 @Service
 public class CuttingReceiveServiceImpl extends ServiceImpl<CuttingReceiveMapper, CuttingReceive> implements ICuttingReceiveService {
-
+    @Autowired
+    private ICuttingInventoryService cuttingInventoryService;
+    @Autowired
+    private ICuttingReceiveDetailService cuttingReceiveDetailService;
     @Override
     public IPage<Map<String, Object>> getInventoryToolList(Integer pageNo, Integer pageSize, Map<String, Object> params) {
         IPage<Map> pageData = new Page<Map>(pageNo, pageSize);
         return super.getBaseMapper().getInventoryToolList(pageData,params);
     }
+    @Override
+    @Timed(value = "cutting.receive.submit", description = "鍒�鍏烽鐢ㄦ彁浜よ�楁椂")
+    public synchronized Result<?> submit(String orderId) {
+        long startTime = System.currentTimeMillis();
+        try {
+            // 1. 鏇存柊棰嗙敤鍗曠姸鎬�
+            CuttingReceive cuttingReceive = this.getById(orderId);
+            if (cuttingReceive == null) {
+                return Result.error("鏈壘鍒板搴旂殑棰嗙敤鍗�");
+            }
+
+            // 妫�鏌ラ鐢ㄥ崟鐘舵�侊紝鍙厑璁哥姸鎬佷负"1"鐨勯鐢ㄥ崟鎻愪氦
+            if (!"1".equals(cuttingReceive.getOrderStatus())) {
+                return Result.error("鍙湁鐘舵�佷负鏈彁浜ょ殑棰嗙敤鍗曟墠鑳芥墽琛屾彁浜ゆ搷浣�");
+            }
+
+            cuttingReceive.setOrderStatus("2"); // 璁剧疆涓哄凡棰嗙敤鐘舵��
+            boolean updateResult = this.updateById(cuttingReceive);
+            if (!updateResult) {
+                return Result.error("鏇存柊棰嗙敤鍗曠姸鎬佸け璐ワ紝鍙兘宸茶鍏朵粬鐢ㄦ埛澶勭悊");
+            }
+
+            // 2. 鑾峰彇棰嗙敤鏄庣粏
+            List<CuttingReceiveDetail> detailList = cuttingReceiveDetailService.lambdaQuery()
+                    .eq(CuttingReceiveDetail::getOrderId, orderId)
+                    .list();
+
+            // 3. 鏀堕泦鎵�鏈夐渶瑕佹洿鏂扮姸鎬佺殑搴撳瓨ID
+            List<String> inventoryIds = new ArrayList<>();
+            for (CuttingReceiveDetail detail : detailList) {
+                if (detail.getInventoryId() != null && !detail.getInventoryId().isEmpty()) {
+                    inventoryIds.add(detail.getInventoryId());
+                }
+            }
+
+            // 4. 鎵归噺鏇存柊搴撳瓨鐘舵�佷负"宸插嚭搴�"
+            if (!inventoryIds.isEmpty()) {
+                cuttingInventoryService.updateStatus(inventoryIds, "宸插嚭搴�");
+            }
+
+            long endTime = System.currentTimeMillis();
+            log.info("鍒�鍏烽鐢ㄦ彁浜ゅ畬鎴愶紝鑰楁椂: {} ms", (endTime - startTime));
+            return Result.ok("鎻愪氦鎴愬姛");
+
+        } catch (Exception e) {
+            long endTime = System.currentTimeMillis();
+            log.error("鎻愪氦棰嗙敤鍗曞け璐ワ紝orderId: " + orderId + "锛岃�楁椂: " + (endTime - startTime) + " ms", e);
+            return Result.error("鎻愪氦澶辫触: " + e.getMessage());
+        }
+    }
 }

--
Gitblit v1.9.3