From 11514b301466eb7598073d0126c6d9781daaa3ba Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期一, 09 三月 2026 14:00:40 +0800
Subject: [PATCH] 盘点流程

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java       |   32 ++++++++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java    |   62 ++++++++++++++++++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java            |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckOrderType.java               |    3 +
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java  |   15 +++--
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/config/ApiSecurityConfig.java                |    3 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java       |    3 +
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreasItem.java          |    6 +-
 rsf-server/src/main/java/com/vincent/rsf/server/common/exception/GlobalExceptionHandler.java    |   12 ++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckDiffItemController.java |   15 +++--
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TaskService.java                |    5 +
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java            |    6 ++
 12 files changed, 147 insertions(+), 17 deletions(-)

diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/config/ApiSecurityConfig.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/config/ApiSecurityConfig.java
index 54491fd..1c7e82d 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/config/ApiSecurityConfig.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/config/ApiSecurityConfig.java
@@ -27,7 +27,8 @@
         FilterRegistrationBean<AppIdAuthenticationFilter> registrationBean = new FilterRegistrationBean<>();
         
         registrationBean.setFilter(appIdAuthenticationFilter);
-        registrationBean.addUrlPatterns("/api/*", "/erp/*", "/mes/*", "/agv/*"); // 鎷︽埅API璇锋眰銆丒RP璇锋眰銆丮ES璇锋眰銆佺鐞咥GV浠诲姟璇锋眰
+        registrationBean.addUrlPatterns("/api/*", "/agv/*"); // 鎷︽埅API璇锋眰銆丒RP璇锋眰銆丮ES璇锋眰銆佺鐞咥GV浠诲姟璇锋眰
+//        registrationBean.addUrlPatterns("/api/*", "/erp/*", "/mes/*", "/agv/*"); // 鎷︽埅API璇锋眰銆丒RP璇锋眰銆丮ES璇锋眰銆佺鐞咥GV浠诲姟璇锋眰
         registrationBean.setName("apiAuthenticationFilter");
         registrationBean.setOrder(1); // 璁剧疆杩囨护鍣ㄤ紭鍏堢骇
         
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java
index 26b5778..e8a8a26 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaCheckOrderServiceImpl.java
@@ -92,16 +92,20 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public R saveCheckDiff(SaveCheckDiffParams params, Long loginUserId) {
+        if (params.getCheckDiffItems() == null || params.getCheckDiffItems().isEmpty()) {
+            throw new CoolException("鐩樼偣鏄庣粏涓嶈兘涓虹┖");
+        }
+        Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, params.getContainer()).last("limit 1"));
+        if (null == task) {
+            throw new CoolException("鏁版嵁閿欒锛屾湭鎵惧埌瀹瑰櫒鐮佸搴旂洏鐐逛换鍔�");
+        }
+
         CheckDiff checkDiff = checkDiffService.getById(params.getCheckId());
         if (null == checkDiff) {
             return R.error("鏈壘鍒扮洏鐐瑰樊寮傚崟");
         }
         if (checkDiff.getExceStatus().equals(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_END.val)) {
             return R.error("璇ョ洏鐐瑰崟宸插畬鎴�");
-        }
-        Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, params.getContainer()).last("limit 1"));
-        if (null == task) {
-            throw new CoolException("鏁版嵁閿欒锛屾湭鎵惧埌瀹瑰櫒鐮佸搴旂洏鐐逛换鍔�");
         }
         for (CheckDiffItem ckDiffItem : params.getCheckDiffItems()) {
             CheckDiffItem diffItem = new CheckDiffItem();
@@ -244,7 +248,6 @@
         if (checkDiffItems.isEmpty()) {
             throw new CoolException("姝ゆ潯鐮佷笉鍦ㄥ綋鍓嶇洏鐐瑰崟涓�");
         }
-
-        return R.ok(Cools.add("checkDiffItems",checkDiffItems).add("checkDiff",checkDiff));
+        return R.ok(Cools.add("checkDiffItems", checkDiffItems).add("checkDiff", checkDiff));
     }
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
index aa17791..d814f05 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
@@ -1080,6 +1080,12 @@
 
                 flowStepInstanceService.updateById(flowStepInstance);
                 taskService.updateById(task);
+                // 鐩樼偣鍐嶅叆搴撲换鍔$粡 WCS 涓婃姤鍙樹负 100锛堝簱瀛樻洿鏂板畬鎴愶級鏃讹紝鍚屾灏嗙洏鐐瑰樊寮傚崟缃负宸插鏍�
+                if (TaskType.TASK_TYPE_CHECK_IN.type.equals(task.getTaskType())
+                        && flowStepInstance.getWmsNextTaskStatus() != null
+                        && flowStepInstance.getWmsNextTaskStatus().equals(TaskStsType.UPDATED_IN.id)) {
+                    taskService.markCheckDiffApprovedWhenCheckInDone(task);
+                }
                 if (flowStepInstance.getWmsNextTaskStatus() != 9999) {
                     FlowStepInstance nextFlowStepInstance = flowStepInstanceService.getOne(new LambdaQueryWrapper<FlowStepInstance>()
                             .eq(FlowStepInstance::getStatus, (short)0)
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/exception/GlobalExceptionHandler.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/exception/GlobalExceptionHandler.java
index f26d109..dd86522 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/exception/GlobalExceptionHandler.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/exception/GlobalExceptionHandler.java
@@ -81,6 +81,18 @@
 
 
     @ResponseBody
+    @ExceptionHandler(RuntimeException.class)
+    public R runtimeExceptionHandler(RuntimeException e, HttpServletResponse response) {
+        CommonUtil.addCrossHeaders(response);
+        Throwable cause = e.getCause();
+        if (cause instanceof CoolException) {
+            return R.error(cause.getMessage());
+        }
+        logger.error(e.getMessage(), e);
+        return R.error(Constants.RESULT_ERROR_MSG);
+    }
+
+    @ResponseBody
     @ExceptionHandler(Throwable.class)
     public R exceptionHandler(Throwable e, HttpServletResponse response) {
         logger.error(e.getMessage(), e);
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckDiffItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckDiffItemController.java
index 6e1052b..ba5b385 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckDiffItemController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/CheckDiffItemController.java
@@ -93,18 +93,21 @@
         if (!diffItems.isEmpty()) {
             Map<Integer, List<CheckDiffItem>> listMap = diffItems.stream().collect(Collectors.groupingBy(CheckDiffItem::getExceStatus));
             List<CheckDiffItem> checkDiffItems = listMap.get(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_END.val);
-            if (diffItems.size() == checkDiffItems.size()) {
+            if (checkDiffItems != null && diffItems.size() == checkDiffItems.size()) {
                 if (!checkDiffService.update(new LambdaUpdateWrapper<CheckDiff>()
                         .eq(CheckDiff::getId, checkDiffItem.getCheckId())
                         .set(CheckDiff::getExceStatus, CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_END.val))) {
                     throw new CoolException("鐩樼偣鍗曠姸鎬佹洿鏂板け璐ワ紒锛�");
                 }
-
-                if (!checkOrderService.update(new LambdaUpdateWrapper<WkOrder>().eq(WkOrder::getId, checkDiffItem.getCheckId())
-                        .set(WkOrder::getExceStatus, CheckExceStatus.CHECK_ORDER_STATUS_EXCE_DONE.val))) {
-                    throw new CoolException("鐩樼偣鍗曟墽琛岀姸鎬佷慨鏀瑰け璐ワ紒锛�");
+                // 浠呭湪鏈夊崟鏃舵洿鏂扮洏鐐瑰崟(WkOrder)鎵ц鐘舵�侊紱鏃犲崟鐩樼偣鏃犵洏鐐瑰崟锛屼笉鏇存柊
+                CheckDiff checkDiff = checkDiffService.getById(checkDiffItem.getCheckId());
+                if (checkDiff != null && checkDiff.getOrderId() != null) {
+                    if (!checkOrderService.update(new LambdaUpdateWrapper<WkOrder>()
+                            .eq(WkOrder::getId, checkDiff.getOrderId())
+                            .set(WkOrder::getExceStatus, CheckExceStatus.CHECK_ORDER_STATUS_EXCE_DONE.val))) {
+                        throw new CoolException("鐩樼偣鍗曟墽琛岀姸鎬佷慨鏀瑰け璐ワ紒锛�");
+                    }
                 }
-
             } else {
                 if (!checkDiffService.update(new LambdaUpdateWrapper<CheckDiff>()
                         .eq(CheckDiff::getId, checkDiffItem.getCheckId())
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java
index 638612a..a545b04 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocItemController.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.vincent.rsf.framework.common.Cools;
 import com.vincent.rsf.framework.common.R;
+import com.vincent.rsf.framework.exception.CoolException;
 import com.vincent.rsf.server.common.constant.Constants;
 import com.vincent.rsf.server.common.utils.ExcelUtil;
 import com.vincent.rsf.server.common.annotation.OperationLog;
@@ -137,6 +138,8 @@
 
         try {
             locItemService.generateTask(TaskResouceType.TASK_RESOUCE_CHECK_TYPE.val, map, getLoginUserId());
+        } catch (CoolException e) {
+            throw e;
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreasItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreasItem.java
index 8f15164..3f483b2 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreasItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreasItem.java
@@ -335,9 +335,9 @@
 //    );
 
     public BigDecimal getAbleQty(){
-        BigDecimal anfmeDec = new BigDecimal(this.anfme.toString());
-        BigDecimal workQtyDec = new BigDecimal(this.workQty.toString());
-        BigDecimal qtyDec = new BigDecimal(this.qty.toString());
+        BigDecimal anfmeDec = this.anfme != null ? new BigDecimal(this.anfme.toString()) : BigDecimal.ZERO;
+        BigDecimal workQtyDec = this.workQty != null ? new BigDecimal(this.workQty.toString()) : BigDecimal.ZERO;
+        BigDecimal qtyDec = this.qty != null ? new BigDecimal(this.qty.toString()) : BigDecimal.ZERO;
 
         return anfmeDec.subtract(workQtyDec).subtract(qtyDec);
     }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckOrderType.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckOrderType.java
index 0930eba..70b7a68 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckOrderType.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/CheckOrderType.java
@@ -14,6 +14,7 @@
     CHECK_ORDER_TYPE_DIFF("4", "宸紓鐩樼偣"),
     CHECK_ORDER_TYPE_CIRCLE("5", "寰幆鐩樼偣"),
     CHECK_ORDER_TYPE_TIMER("6", "瀹氭湡鐩樼偣"),
+    CHECK_ORDER_TYPE_NORM("7", "鏍囧噯鐩樼偣"),
     ;
 
     CheckOrderType(String type, String desc) {
@@ -37,6 +38,8 @@
             return CheckOrderType.CHECK_ORDER_TYPE_CIRCLE.type;
         } else if (desc.equals(CheckOrderType.CHECK_ORDER_TYPE_TIMER.desc)) {
             return CheckOrderType.CHECK_ORDER_TYPE_TIMER.type;
+        } else if (desc.equals(CheckOrderType.CHECK_ORDER_TYPE_NORM.desc)) {
+            return CheckOrderType.CHECK_ORDER_TYPE_NORM.type;
         }
         return null;
     }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
index 817e4a4..1b9f428 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
@@ -484,7 +484,7 @@
 //    @Scheduled(cron = "0/3 * * * * ?")
     public void completeInStock() throws Exception {
         try{
-            List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id).select(Task::getId));
+            List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().select(Task::getId).eq(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id));
             if (tasks.isEmpty()) {
                 return;
             }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TaskService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TaskService.java
index 0873789..190f5fd 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TaskService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TaskService.java
@@ -25,6 +25,11 @@
 
     void complateInTask(List<Task> tasks) throws Exception;
 
+    /**
+     * 鐩樼偣鍐嶅叆搴撳畬鎴愬悗锛屽皢鍏宠仈鐨勭洏鐐瑰樊寮傚崟缃负宸插鏍革紙鏈夊崟鎸� orderId锛屾棤鍗曟寜 鍑哄簱浠诲姟鍙� orderCode锛�
+     */
+    void markCheckDiffApprovedWhenCheckInDone(Task checkInTask);
+
     Task taskToTop(Long id, Long loginUserId) throws Exception;
 
     Task operateComplete(Long id, Long loginUserId);
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
index 08e424b..c91703d 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
@@ -1,6 +1,7 @@
 package com.vincent.rsf.server.manager.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.vincent.rsf.framework.exception.CoolException;
 import com.vincent.rsf.server.api.controller.erp.params.TaskInParam;
 import com.vincent.rsf.server.api.entity.dto.InTaskMsgDto;
@@ -53,6 +54,10 @@
     private BasStationService basStationService;
     @Autowired
     private LocItemWorkingService locItemWorkingService;
+    @Autowired
+    private CheckDiffService checkDiffService;
+    @Autowired
+    private CheckDiffItemService checkDiffItemService;
 
 
     /**
@@ -367,6 +372,63 @@
             if (!taskItemService.saveBatch(taskItems)) {
                 throw new CoolException("浠诲姟鏄庣粏鐢熸垚澶辫触锛侊紒");
             }
+
+            // 鏃犲崟鐩樼偣锛氭彁鍙栧嚭搴撴椂鍗崇敓鎴愮洏鐐瑰樊寮傚崟锛屼究浜� PDA 鎸夊樊寮傚崟鏍¢獙
+            if (map.getType().equals(Constants.TASK_TYPE_OUT_CHECK)) {
+                Date now = new Date();
+                double sumAnfme = taskItems.stream().mapToDouble(ti -> ti.getAnfme() != null ? ti.getAnfme() : 0).sum();
+                CheckDiff checkDiff = new CheckDiff();
+                checkDiff.setOrderCode(task.getTaskCode())
+                        .setOrderId(null)
+                        .setCheckType(0)
+                        .setExceStatus(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_INIT.val)
+                        .setAnfme(sumAnfme)
+                        .setCheckQty(0D)
+                        .setStatus(1)
+                        .setDeleted(0)
+                        .setTenantId(task.getTenantId())
+                        .setCreateBy(loginUserId)
+                        .setCreateTime(now)
+                        .setUpdateBy(loginUserId)
+                        .setUpdateTime(now);
+                if (loc.getAreaId() != null) {
+                    checkDiff.setAreaId(loc.getAreaId()).setAreaName(loc.getAreaId$());
+                }
+                if (!checkDiffService.save(checkDiff)) {
+                    throw new CoolException("鏃犲崟鐩樼偣宸紓鍗曞垱寤哄け璐ワ紒锛�");
+                }
+                List<CheckDiffItem> diffItems = new ArrayList<>();
+                for (TaskItem ti : taskItems) {
+                    CheckDiffItem diffItem = new CheckDiffItem();
+                    diffItem.setCheckId(checkDiff.getId())
+                            .setOrderCode(task.getTaskCode())
+                            .setTaskId(task.getId())
+                            .setTaskItemId(ti.getId())
+                            .setBarcode(task.getBarcode())
+                            .setAnfme(ti.getAnfme() != null ? ti.getAnfme() : 0D)
+                            .setCheckQty(ti.getAnfme() != null ? ti.getAnfme() : 0D)
+                            .setMatnrCode(ti.getMatnrCode())
+                            .setMaktx(ti.getMaktx())
+                            .setBatch(ti.getBatch())
+                            .setSpec(ti.getSpec())
+                            .setModel(ti.getModel())
+                            .setExceStatus(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_INIT.val)
+                            .setStatus(1)
+                            .setDeleted(0)
+                            .setTenantId(task.getTenantId())
+                            .setCreateBy(loginUserId)
+                            .setCreateTime(now)
+                            .setUpdateBy(loginUserId)
+                            .setUpdateTime(now);
+                    diffItems.add(diffItem);
+                }
+                if (!checkDiffItemService.saveBatch(diffItems)) {
+                    throw new CoolException("鏃犲崟鐩樼偣宸紓鏄庣粏鍒涘缓澶辫触锛侊紒");
+                }
+                taskItemService.update(new LambdaUpdateWrapper<TaskItem>()
+                        .set(TaskItem::getSourceCode, task.getTaskCode())
+                        .eq(TaskItem::getTaskId, task.getId()));
+            }
         });
     }
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
index 2249ac0..bc755ee 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -1132,7 +1132,39 @@
         if (!taskService.updateById(task)) {
             throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
         }
+        // 鐩樼偣鍐嶅叆搴撲换鍔$粨鏉燂細灏嗗叧鑱旂殑鐩樼偣宸紓鍗曠疆涓哄凡瀹℃牳
+        if (TaskType.TASK_TYPE_CHECK_IN.type.equals(task.getTaskType())) {
+            markCheckDiffApprovedWhenCheckInDone(task);
+        }
+    }
 
+    /**
+     * 鐩樼偣鍐嶅叆搴撳畬鎴愬悗锛屽皢鍏宠仈鐨勭洏鐐瑰樊寮傚崟缃负宸插鏍革紙鏈夊崟鎸� orderId锛屾棤鍗曟寜 鍑哄簱浠诲姟鍙� orderCode锛�
+     */
+    @Override
+    public void markCheckDiffApprovedWhenCheckInDone(Task checkInTask) {
+        List<TaskItem> items = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, checkInTask.getId()).last("limit 1"));
+        Long orderId = items.isEmpty() ? null : items.get(0).getOrderId();
+        CheckDiff checkDiff = null;
+        if (orderId != null && !orderId.equals(0L)) {
+            checkDiff = checkDiffService.getOne(new LambdaQueryWrapper<CheckDiff>().eq(CheckDiff::getOrderId, orderId).last("limit 1"));
+        } else {
+            Task outTask = taskService.getOne(new LambdaQueryWrapper<Task>()
+                    .eq(Task::getBarcode, checkInTask.getBarcode())
+                    .eq(Task::getTaskType, TaskType.TASK_TYPE_CHECK_OUT.type)
+                    .last("limit 1"));
+            if (outTask != null) {
+                checkDiff = checkDiffService.getOne(new LambdaQueryWrapper<CheckDiff>()
+                        .eq(CheckDiff::getOrderCode, outTask.getTaskCode())
+                        .and(w -> w.isNull(CheckDiff::getOrderId).or().eq(CheckDiff::getOrderId, 0))
+                        .last("limit 1"));
+            }
+        }
+        if (checkDiff != null && !CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_END.val.equals(checkDiff.getExceStatus())) {
+            checkDiffService.update(new LambdaUpdateWrapper<CheckDiff>()
+                    .eq(CheckDiff::getId, checkDiff.getId())
+                    .set(CheckDiff::getExceStatus, CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_END.val));
+        }
     }
 
     /**

--
Gitblit v1.9.1