From f85b03552c97f935e2c5102dee08648d6ab8e782 Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期四, 26 三月 2026 16:22:56 +0800
Subject: [PATCH] #pda成品直送

---
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/PdaOutStockService.java           |    2 +
 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaOutStockController.java |    6 +++
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java  |   70 +++++++++++++++++++++++++++++++++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TaskType.java                   |    3 +
 4 files changed, 81 insertions(+), 0 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaOutStockController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaOutStockController.java
index c8423f8..6ff9602 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaOutStockController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaOutStockController.java
@@ -224,5 +224,11 @@
         return pdaOutStockService.productionDirectDelivery(param,getLoginUserId());
     }
 
+    @PostMapping("/orderOut/finishedProductDirectOutput")
+    @ApiOperation("鎴愬搧鐩村嚭")
+    public R finishedProductDirectOutput(@RequestBody PdaGeneralParam param) {
+        return pdaOutStockService.finishedProductDirectOutput(param,getLoginUserId());
+    }
+
 }
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/PdaOutStockService.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/PdaOutStockService.java
index a6a4511..0576add 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/PdaOutStockService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/PdaOutStockService.java
@@ -27,5 +27,7 @@
     R getStationArea(PdaGeneralParam param);
 
     R productionDirectDelivery(PdaGeneralParam param,Long loginUserId);
+
+    R finishedProductDirectOutput(PdaGeneralParam param, Long loginUserId);
 }
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java
index 8390a0a..a362a06 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java
@@ -421,6 +421,76 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R finishedProductDirectOutput(PdaGeneralParam param, Long loginUserId) {
+        WkOrder order = asnOrderService.getOne(new LambdaQueryWrapper<WkOrder>()
+                .eq(WkOrder::getCode, param.getOrderNo())
+                .eq(WkOrder::getType,OrderType.ORDER_OUT.type)
+        );
+        if (null == order) {
+            throw new CoolException("鏈壘鍒板搴旇鍗�");
+        }
+        ArrayList<String> arrayList = new ArrayList<>();
+        arrayList.add(param.getStationAreaId().toString());
+        Task task = new Task();
+        String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TASK_CODE, null);
+        task.setTaskCode(ruleCode)
+                .setOrgSite(param.getSta1())
+                .setSort(Constants.TASK_SORT_DEFAULT_VALUE)
+                .setUpdateBy(loginUserId)
+                .setCreateBy(loginUserId)
+                .setCreateTime(new Date())
+                .setUpdateTime(new Date())
+                .setTaskStatus(TaskStsType.MISSION_INITIAL.id)
+                .setBarcode(param.getContainerNo())
+                .setTargSiteArea(arrayList)
+                .setTaskType(TaskType.TASK_TYPE_FPDO.type);
+
+        if (!taskService.save(task)) {
+            throw new CoolException("浠诲姟鍒涘缓澶辫触锛侊紒");
+        }
+        List<TaskItem> taskItems = new ArrayList<>();
+        param.getWkOrderItems().forEach(item -> {
+            TaskItem taskItem = new TaskItem();
+            BeanUtils.copyProperties(item, taskItem);
+            taskItem.setTaskId(task.getId())
+                    .setAnfme(item.getDemandQty())
+                    .setWorkQty(0D)
+                    .setBatch(item.getBatch())
+                    .setUpdateBy(loginUserId)
+                    .setCreateBy(loginUserId)
+                    .setCreateTime(new Date())
+                    .setUpdateTime(new Date())
+                    .setSplrBatch(item.getBatch())
+                    .setPlatWorkCode(item.getPlatWorkCode())
+                    .setPlatItemId(item.getPlatItemId())
+                    .setOrderType(OrderType.ORDER_OUT.type)
+                    .setWkType(Short.parseShort(order.getWkType()))
+                    .setSourceCode(order.getCode())
+                    .setSourceId(order.getId());
+            taskItems.add(taskItem);
+
+            item.setWorkQty(item.getWorkQty()+item.getDemandQty());
+        });
+        if (!taskItemService.saveBatch(taskItems)) {
+            throw new CoolException("浠诲姟鏄庣粏鐢熸垚澶辫触锛侊紒");
+        }
+        if (!order.getExceStatus().equals(AsnExceStatus.ASN_EXCE_STATUS_EXCE_ING.val)) {
+            order.setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_EXCE_ING.val);
+            order.setUpdateBy(loginUserId);
+            order.setUpdateTime(new Date());
+            if (!asnOrderService.updateById(order)){
+                throw new CoolException("鍗曟嵁鐘舵�佹洿鏂板け璐ワ紒锛�");
+            }
+        }
+        if (!asnOrderItemService.updateBatchById(param.getWkOrderItems())) {
+            throw new CoolException("鍗曟嵁鏄庣粏鏇存柊澶辫触锛侊紒");
+        }
+
+        return R.ok();
+    }
+
+    @Override
     public R getWaveListItem(String barcode) {
         LambdaQueryWrapper<Wave> lambdaQueryWrapper = new LambdaQueryWrapper<>();
         lambdaQueryWrapper.eq(!Cools.isEmpty(barcode), Wave::getCode, barcode);
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TaskType.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TaskType.java
index 5076b1d..f261d38 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TaskType.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TaskType.java
@@ -22,6 +22,7 @@
     TASK_TYPE_CROSS_DOCKING_OUT("109", "澶囪揣"),
     TASK_TYPE_EMPTY_OUT("110", "绌烘澘鍑哄簱"),
     TASK_TYPE_PDD("111", "鐢熶骇鐩撮��"),
+    TASK_TYPE_FPDO("112", "鎴愬搧鐩村嚭"),
     ;
     public Integer type;
     public String desc;
@@ -53,6 +54,8 @@
             return TaskType.TASK_TYPE_EMPTY_OUT.desc;
         }else if (TaskType.TASK_TYPE_PDD.type.equals(type)) {
             return TaskType.TASK_TYPE_PDD.desc;
+        }else if (TaskType.TASK_TYPE_FPDO.type.equals(type)) {
+            return TaskType.TASK_TYPE_FPDO.desc;
         }
 
         return null;

--
Gitblit v1.9.1