From d2286c31bbc9678b0d45277e8c5d97faf1d239a4 Mon Sep 17 00:00:00 2001
From: Ryan <creaycat@gmail.com>
Date: 星期三, 02 四月 2025 20:13:37 +0800
Subject: [PATCH] #新增 1. 新增任务上架接口 2. 新增获取任务信息接口 2. 新增人工上架接口

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java      |   89 +++++++++-
 rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/TaskLocAreaDto.java             |   25 +++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java           |   61 -------
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java                 |   11 
 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java           |   38 ++++
 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/PublicToStockParams.java |   22 ++
 rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/TaskQueueDto.java               |   28 +++
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java        |  158 ++++++++++++++++++-
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TaskService.java               |    4 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskController.java         |    4 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java                   |    5 
 11 files changed, 352 insertions(+), 93 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
index 7729419..13eb3eb 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
@@ -2,10 +2,7 @@
 
 import com.vincent.rsf.framework.common.R;
 import com.vincent.rsf.framework.exception.CoolException;
-import com.vincent.rsf.server.api.controller.params.CheckObjParams;
-import com.vincent.rsf.server.api.controller.params.OpStockParams;
-import com.vincent.rsf.server.api.controller.params.OtherReceiptParams;
-import com.vincent.rsf.server.api.controller.params.ReceiptParams;
+import com.vincent.rsf.server.api.controller.params.*;
 import com.vincent.rsf.server.api.service.MobileService;
 import com.vincent.rsf.server.manager.controller.params.WaitPakinParam;
 import com.vincent.rsf.server.manager.entity.QlyIsptItem;
@@ -207,11 +204,42 @@
 
     @ApiOperation("鑾峰彇涓婃灦淇℃伅")
     @PreAuthorize("hasAuthority('manager:qlyInspect:list')")
-    @PostMapping("/stock/operate")
+    @PostMapping("/stock/operate/list")
     public R operateToStock(@RequestBody OpStockParams params) {
         if (Objects.isNull(params)) {
             return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
         return mobileService.operateToStock(params);
     }
+
+    @ApiOperation("浜哄伐涓婃灦")
+    @PreAuthorize("hasAuthority('manager:qlyInspect:update')")
+    @PostMapping("/stock/operate")
+    public R publicToStock(@RequestBody PublicToStockParams params) {
+        if (Objects.isNull(params)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        return mobileService.publicToStock(params);
+    }
+
+    @ApiOperation("鑾峰彇浠诲姟淇℃伅")
+    @PreAuthorize("hasAuthority('manager:qlyInspect:list')")
+    @PostMapping("/task/stock/{code}")
+    public R taskToStock(@PathVariable String code) {
+        if (Objects.isNull(code)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        return mobileService.taskToStock(code);
+    }
+
+    @ApiOperation("浠诲姟涓婃灦")
+    @PreAuthorize("hasAuthority('manager:qlyInspect:update')")
+    @PostMapping("/task/stock")
+    public R taskToLocs(@PathVariable String code) throws Exception {
+        if (Objects.isNull(code)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        return mobileService.taskGetLocs(code);
+    }
+
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/PublicToStockParams.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/PublicToStockParams.java
new file mode 100644
index 0000000..fdc7b63
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/PublicToStockParams.java
@@ -0,0 +1,22 @@
+package com.vincent.rsf.server.api.controller.params;
+
+import com.vincent.rsf.server.manager.entity.AsnOrderItem;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "PublicToStockParams", description = "浜哄伐涓婃灦")
+public class PublicToStockParams implements Serializable {
+
+    @ApiModelProperty("搴撲綅缂栫爜")
+    private String locCode;
+
+    @ApiModelProperty("鍗曟嵁鏄庣粏")
+    private List<AsnOrderItem> itemList;
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/TaskLocAreaDto.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/TaskLocAreaDto.java
new file mode 100644
index 0000000..b85cdc7
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/TaskLocAreaDto.java
@@ -0,0 +1,25 @@
+package com.vincent.rsf.server.api.entity.dto;
+
+import com.vincent.rsf.server.manager.entity.Loc;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "TaskLocAreaDto", description = "搴撲綅淇℃伅")
+public class TaskLocAreaDto implements Serializable {
+
+    @ApiModelProperty("搴撲綅搴撳尯")
+    private String areaCode;
+    @ApiModelProperty("搴撳尯鍚嶇О")
+    private String areaName;
+    @ApiModelProperty("搴撳尯ID")
+    private Long areaId;
+    @ApiModelProperty("搴撲綅淇℃伅")
+    private List<Loc> locs;
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/TaskQueueDto.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/TaskQueueDto.java
new file mode 100644
index 0000000..36c9383
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/TaskQueueDto.java
@@ -0,0 +1,28 @@
+package com.vincent.rsf.server.api.entity.dto;
+
+import com.vincent.rsf.server.manager.entity.Loc;
+import com.vincent.rsf.server.manager.entity.Task;
+import com.vincent.rsf.server.manager.entity.TaskItem;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "TaskQueueDto", description = "浠诲姟淇℃伅")
+public class TaskQueueDto implements Serializable {
+
+    @ApiModelProperty("浠诲姟涓诲崟")
+    private Task task;
+
+    @ApiModelProperty("浠诲姟鏄庣粏")
+    private List<TaskItem> taskItems;
+
+    @ApiModelProperty("搴撲綅淇℃伅")
+    private TaskLocAreaDto locArea;
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
index 76c5b8c..8609f3e 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
@@ -1,10 +1,7 @@
 package com.vincent.rsf.server.api.service;
 
 import com.vincent.rsf.framework.common.R;
-import com.vincent.rsf.server.api.controller.params.CheckObjParams;
-import com.vincent.rsf.server.api.controller.params.OpStockParams;
-import com.vincent.rsf.server.api.controller.params.OtherReceiptParams;
-import com.vincent.rsf.server.api.controller.params.ReceiptParams;
+import com.vincent.rsf.server.api.controller.params.*;
 import com.vincent.rsf.server.manager.controller.params.WaitPakinParam;
 import com.vincent.rsf.server.manager.entity.AsnOrder;
 import com.vincent.rsf.server.manager.entity.QlyIsptItem;
@@ -53,4 +50,10 @@
     R checkUpdate(QlyIsptItem params);
 
     R operateToStock(OpStockParams params);
+
+    R publicToStock(PublicToStockParams params);
+
+    R taskToStock(String code);
+
+    R taskGetLocs(String code) throws Exception;
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
index bced611..6df867e 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -4,14 +4,8 @@
 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.api.controller.params.CheckObjParams;
-import com.vincent.rsf.server.api.controller.params.OpStockParams;
-import com.vincent.rsf.server.api.controller.params.OtherReceiptParams;
-import com.vincent.rsf.server.api.controller.params.ReceiptParams;
-import com.vincent.rsf.server.api.entity.dto.CheckObjDto;
-import com.vincent.rsf.server.api.entity.dto.InspectDetlDto;
-import com.vincent.rsf.server.api.entity.dto.InspectItemDto;
-import com.vincent.rsf.server.api.entity.dto.ReceiptDetlsDto;
+import com.vincent.rsf.server.api.controller.params.*;
+import com.vincent.rsf.server.api.entity.dto.*;
 import com.vincent.rsf.server.api.entity.enums.OrderWorkType;
 import com.vincent.rsf.server.api.service.MobileService;
 import com.vincent.rsf.server.common.config.ConfigProperties;
@@ -49,6 +43,7 @@
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @author Ryan
@@ -101,16 +96,28 @@
 
     @Autowired
     private WaitPakinItemService waitPakinItemService;
-
     @Autowired
     private AsnOrderItemLogService asnOrderItemLogService;
-
     @Autowired
     private FieldsItemService fieldsItemService;
-
     @Autowired
     private LocService locService;
-
+    @Autowired
+    private PurchaseService purchaseService;
+    @Autowired
+    private StockService stockService;
+    @Autowired
+    private StockItemService stockItemService;
+    @Autowired
+    private TaskService taskService;
+    @Autowired
+    private TaskItemService taskItemService;
+    @Autowired
+    private LocAreaMatRelaMapper locAreaMatRelaMapper;
+    @Autowired
+    private LocAreaRelaMapper locAreaRelaMapper;
+    @Autowired
+    private LocAreaMapper locAreaMapper;
 
     /**
      * @author Ryan
@@ -607,6 +614,133 @@
     }
 
     /**
+     * 浜哄伐涓婃灦鍏ュ簱
+     * @param params
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R publicToStock(PublicToStockParams params) {
+        if (Objects.isNull(params.getLocCode()) || StringUtils.isBlank(params.getLocCode())) {
+            throw new CoolException("搴撲綅涓嶈兘涓虹┖锛侊紒");
+        }
+        if (Objects.isNull(params.getItemList()) || params.getItemList().isEmpty()) {
+            throw new CoolException("鍗曟嵁鏄庣粏涓嶈兘涓虹┖锛侊紒");
+        }
+        Long OrderId = params.getItemList().stream().findFirst().get().getAsnId();
+        AsnOrder order = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getId, OrderId));
+        if (Objects.isNull(order)) {
+            throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
+        }
+        Stock stock = new Stock();
+        stock.setAsnId(OrderId).setAsnCode(order.getCode());
+        if (!Objects.isNull(order.getPoCode()) && StringUtils.isNotBlank(order.getPoCode())) {
+            Purchase purchase = purchaseService.getOne(new LambdaQueryWrapper<Purchase>().eq(Purchase::getCode, order.getPoCode()));
+            stock.setPlatOrderNo(purchase.getPlatCode()).setPlatToken(purchase.getPlatId());
+        }
+        String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_STOCK_CODE, null);
+        if (StringUtils.isBlank(ruleCode)) {
+            throw new CoolException("褰撳墠涓氬姟锛�" + SerialRuleCode.SYS_STOCK_CODE + "锛岀紪鐮佽鍒欎笉瀛樺湪锛侊紒");
+        }
+        if (!stockService.save(stock)) {
+            throw new CoolException("搴撳瓨淇濆瓨澶辫触锛侊紒");
+        }
+        Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, params.getLocCode()));
+        if (Objects.isNull(loc)) {
+            throw new CoolException("搴撲綅涓嶅瓨鍦紒锛�");
+        }
+        List<StockItem> stockItems = new ArrayList<>();
+        params.getItemList().forEach(orderItem -> {
+            StockItem stockItem = new StockItem();
+            BeanUtils.copyProperties(orderItem, stockItem);
+            stockItem.setAsnItemId(orderItem.getId())
+                    .setBarcode(orderItem.getBarcode())
+                    .setLocId(loc.getId())
+                    .setId(null)
+                    .setStockId(stock.getId());
+            stockItems.add(stockItem);
+        });
+
+        if (!stockItemService.saveBatch(stockItems)) {
+            throw new CoolException("浠诲姟涓婃灦澶辫触锛侊紒");
+        }
+        return R.ok(stock);
+    }
+
+    /**
+     * 鑾峰彇浠诲姟淇℃伅
+     * @param code
+     * @return
+     */
+    @Override
+    public R taskToStock(String code) {
+        if (StringUtils.isBlank(code)) {
+            throw new CoolException("鎷栫洏鐮佷笉鑳戒负绌猴紒锛�");
+        }
+        Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, code));
+        if (Objects.isNull(task)) {
+            throw new CoolException("鎷栫洏浠诲姟涓嶅瓨鍦紒锛�");
+        }
+        List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
+        if (!taskItems.isEmpty()) {
+            throw new CoolException("鎷栫洏浠诲姟鏄庣粏涓嶅瓨鍦紒锛�");
+        }
+        TaskQueueDto queueDto = new TaskQueueDto();
+        queueDto.setTask(task).setTaskItems(taskItems);
+        List<Long> list = taskItems.stream().map(TaskItem::getMatnrId).collect(Collectors.toList());
+        List<LocAreaMatRela> matRelas = locAreaMatRelaMapper.selectList(new LambdaQueryWrapper<LocAreaMatRela>().in(LocAreaMatRela::getMatnrId,
+                list));
+        TaskLocAreaDto locAreaDto = new TaskLocAreaDto();
+        /**鍒ゆ柇鏄惁涓虹┖*/
+        if (matRelas.isEmpty()) {
+            locAreaDto.setLocs(new ArrayList<>());
+        } else {
+            Long ids = matRelas.stream().map(LocAreaMatRela::getLocId).collect(Collectors.toList()).stream().findFirst().get();
+            List<Loc> locs = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getId, ids));
+            if (locs.isEmpty()) {
+                locAreaDto.setLocs(new ArrayList<>());
+            } else {
+                LocArea locArea = locAreaMapper.selectById(new LambdaQueryWrapper<Loc>().in(Loc::getId, ids));
+                if (!Objects.isNull(locArea)) {
+                    locAreaDto.setAreaName(locArea.getName()).setAreaCode(locArea.getCode()).setAreaId(locArea.getId());
+                }
+                locAreaDto.setLocs(locs);
+            }
+        }
+        queueDto.setLocArea(locAreaDto);
+
+        return R.ok(queueDto);
+    }
+
+    /**
+     * @Author Ryan
+     * @param code
+     * @desc  浠诲姟涓婃灦
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R taskGetLocs(String code) throws Exception {
+        if (StringUtils.isBlank(code)) {
+            throw new CoolException("鎷栫洏鐮佷笉鑳戒负绌猴紒锛�");
+        }
+        Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, code));
+        if (Objects.isNull(task)) {
+            throw new CoolException("鎷栫洏浠诲姟涓嶅瓨鍦紒锛�");
+        }
+        List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
+        if (!taskItems.isEmpty()) {
+            throw new CoolException("鎷栫洏浠诲姟鏄庣粏涓嶅瓨鍦紒锛�");
+        }
+        List<Task> tasks = new ArrayList<>();
+        tasks.add(task);
+
+        taskService.completeTask(tasks);
+
+        return R.ok();
+    }
+
+    /**
      * 鑾峰彇ReceiptDetlsDtos
      */
     private R getAsnOrderItem(List<AsnOrderItem> items) {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskController.java
index ced3cec..af1b7ed 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskController.java
@@ -131,7 +131,9 @@
         if (Objects.isNull(id)) {
             throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
-        return taskService.completeTask(id);
+//        return taskService.completeTask(id);
+        return null;
     }
 
+
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java
index 5e36040..9658a4e 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java
@@ -67,6 +67,11 @@
     @ApiModelProperty("鍗曟嵁鏄庣粏ID")
     private Long orderItemId;
     /**
+     * 鐗╂枡璺熻釜鐮�
+     */
+    @ApiModelProperty("鐗╂枡璺熻釜鐮�")
+    private String trackCode;
+    /**
      * 鐗╂枡缂栫爜
      */
     @ApiModelProperty(value= "鐗╂枡缂栫爜")
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 3156c74..7d72b1c 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
@@ -56,68 +56,11 @@
     @Scheduled(cron = "0 0/05 * * * ?  ")
 //  @Scheduled(cron = "0/5 * * * * ?")
     @Transactional(rollbackFor = Exception.class)
-    public void completeInStock() {
+    public void completeInStock() throws Exception {
         List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id));
         if (tasks.isEmpty()) {
             return;
         }
-        List<Long> list = tasks.stream().map(Task::getId).collect(Collectors.toList());
-        List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, list));
-        if (taskItems.isEmpty()) {
-            throw new CoolException("浠诲姟鏄庣粏涓虹┖锛侊紒");
-        }
-        /**瀵逛换鍔℃槑缁嗘寜璁㈠崟杩涜鍒嗙粍*/
-        Map<Long, List<TaskItem>> orderMap = taskItems.stream().collect(Collectors.groupingBy(TaskItem::getOrderId));
-        List<StockItem> stockItems = new ArrayList<>();
-        orderMap.keySet().forEach(key -> {
-            AsnOrder order = asnOrderService.getOne(new LambdaQueryWrapper<AsnOrder>()
-                    .eq(AsnOrder::getId, key)
-                    .select(AsnOrder::getId, AsnOrder::getPoCode, AsnOrder::getCode));
-            Stock stock = new Stock();
-            if (!Objects.isNull(order.getPoCode()) && StringUtils.isNotBlank(order.getPoCode())) {
-                Purchase purchase = purchaseService.getOne(new LambdaQueryWrapper<Purchase>().eq(Purchase::getCode, order.getPoCode()));
-                stock.setPlatOrderNo(purchase.getPlatCode()).setPlatToken(purchase.getPlatId());
-            }
-            String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_STOCK_CODE, null);
-            if (StringUtils.isBlank(ruleCode)) {
-                throw new CoolException("褰撳墠涓氬姟锛�" + SerialRuleCode.SYS_STOCK_CODE + "锛岀紪鐮佽鍒欎笉瀛樺湪锛侊紒");
-            }
-            stock.setAsnId(order.getId()).setAsnCode(order.getCode());
-            if (!stockService.save(stock)) {
-                throw new CoolException("搴撳瓨淇濆瓨澶辫触锛侊紒");
-            }
-            List<TaskItem> items = orderMap.get(key);
-            for (TaskItem item : items) {
-                /**閫氳繃浠诲姟鏄庣粏涓殑taskId鏌ヨ,鑾峰彇TASK鐨勭洰鏍囧簱浣嶄俊鎭�*/
-                Task taskServiceOne = taskService.getOne(new LambdaQueryWrapper<Task>()
-                        .select(Task::getId, Task::getTargLoc, Task::getOrgLoc, Task::getBarcode)
-                        .eq(Task::getId, item.getTaskId()));
-                Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, taskServiceOne.getTargLoc()));
-                if (Objects.isNull(loc)) {
-                    throw new CoolException("搴撲綅涓嶅瓨鍦紒锛�");
-                }
-                AsnOrderItem orderItem = asnOrderItemService.getOne(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getId, item.getOrderItemId()));
-                if (Objects.isNull(orderItem)) {
-                    throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�");
-                }
-                StockItem stockItem = new StockItem();
-                BeanUtils.copyProperties(orderItem, stockItem);
-                stockItem.setAsnItemId(item.getOrderItemId())
-                        .setBarcode(taskServiceOne.getBarcode())
-                        .setLocId(loc.getId())
-                        .setId(null)
-                        .setStockId(stock.getId());
-                stockItems.add(stockItem);
-            }
-            if (!stockItemService.saveBatch(stockItems)) {
-                throw new CoolException("搴撳瓨淇敼鏋跺け璐ワ紒锛�");
-            }
-        });
-        /**淇敼搴撲綅鐘舵�佷负F.鍦ㄥ簱*/
-        List<String> locCodes = tasks.stream().map(Task::getTargLoc).collect(Collectors.toList());
-        if (!locService.update(new LambdaUpdateWrapper<Loc>().set(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_F.type).in(Loc::getCode, locCodes))) {
-            throw new CoolException("搴撲綅鐘舵�佷慨鏀瑰け璐ワ紒锛�");
-        }
+        taskService.completeTask(tasks);
     }
-
 }
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 b2ee0b1..1b77afd 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
@@ -11,5 +11,7 @@
 
     R generateTasks(List<WaitPakin> waitPakin, Long loginUserId);
 
-    R completeTask(String id);
+//    R completeTask(String id);
+
+    void completeTask(List<Task> task) throws Exception;
 }
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 69a060d..b3335ec 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
@@ -23,6 +23,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
@@ -37,7 +38,16 @@
     private WaitPakinItemService waitPakinItemService;
     @Autowired
     private LocService locService;
-
+    @Autowired
+    private PurchaseService purchaseService;
+    @Autowired
+    private AsnOrderService asnOrderService;
+    @Autowired
+    private AsnOrderItemService asnOrderItemService;
+    @Autowired
+    private StockService stockService;
+    @Autowired
+    private StockItemService stockItemService;
 
 
 
@@ -96,6 +106,7 @@
                 taskItem.setTaskId(task.getId())
                         .setOrderType(OrderType.ORDER_RECEIPT.type)
                         .setSource(item.getId())
+                        .setTrackCode(item.getTrackCode())
                         .setCreateBy(loginUserId)
                         .setUpdateBy(loginUserId)
                         .setOrderId(item.getAsnId())
@@ -110,18 +121,74 @@
         return R.ok("浠诲姟鐢熸垚瀹屾瘯锛�");
     }
 
+
     /**
-    * @author Ryan
-    * @description 瀹屾垚浠诲姟
-    * @param
-    * @return
-    * @time 2025/4/2 11:15
-    */
+     * 瀹屾垚浠诲姟
+     * @param tasks
+     * @throws Exception
+     */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public R completeTask(String id) {
-        return null;
+    public void completeTask(List<Task> tasks) throws Exception {
+        if (tasks.isEmpty()) {
+            return;
+        }
+        List<Long> list = tasks.stream().map(Task::getId).collect(Collectors.toList());
+        List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, list));
+        if (taskItems.isEmpty()) {
+            throw new CoolException("浠诲姟鏄庣粏涓嶈兘涓虹┖锛侊紒");
+        }
+        /**瀵逛换鍔℃槑缁嗘寜璁㈠崟杩涜鍒嗙粍*/
+        Map<Long, List<TaskItem>> orderMap = taskItems.stream().collect(Collectors.groupingBy(TaskItem::getOrderId));
+        List<StockItem> stockItems = new ArrayList<>();
+        orderMap.keySet().forEach(key -> {
+            AsnOrder order = asnOrderService.getOne(new LambdaQueryWrapper<AsnOrder>()
+                    .eq(AsnOrder::getId, key)
+                    .select(AsnOrder::getId, AsnOrder::getPoCode, AsnOrder::getCode));
+            Stock stock = new Stock();
+            if (!Objects.isNull(order.getPoCode()) && StringUtils.isNotBlank(order.getPoCode())) {
+                Purchase purchase = purchaseService.getOne(new LambdaQueryWrapper<Purchase>().eq(Purchase::getCode, order.getPoCode()));
+                stock.setPlatOrderNo(purchase.getPlatCode()).setPlatToken(purchase.getPlatId());
+            }
+            String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_STOCK_CODE, null);
+            if (StringUtils.isBlank(ruleCode)) {
+                throw new CoolException("褰撳墠涓氬姟锛�" + SerialRuleCode.SYS_STOCK_CODE + "锛岀紪鐮佽鍒欎笉瀛樺湪锛侊紒");
+            }
+            stock.setAsnId(order.getId()).setAsnCode(order.getCode());
+            if (!stockService.save(stock)) {
+                throw new CoolException("搴撳瓨淇濆瓨澶辫触锛侊紒");
+            }
+            List<TaskItem> items = orderMap.get(key);
+            for (TaskItem item : items) {
+                /**閫氳繃浠诲姟鏄庣粏涓殑taskId鏌ヨ,鑾峰彇TASK鐨勭洰鏍囧簱浣嶄俊鎭�*/
+                Task taskServiceOne = this.getOne(new LambdaQueryWrapper<Task>()
+                        .select(Task::getId, Task::getTargLoc, Task::getOrgLoc, Task::getBarcode)
+                        .eq(Task::getId, item.getTaskId()));
+                Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, taskServiceOne.getTargLoc()));
+                if (Objects.isNull(loc)) {
+                    throw new CoolException("搴撲綅涓嶅瓨鍦紒锛�");
+                }
+                AsnOrderItem orderItem = asnOrderItemService.getOne(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getId, item.getOrderItemId()));
+                if (Objects.isNull(orderItem)) {
+                    throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�");
+                }
+                StockItem stockItem = new StockItem();
+                BeanUtils.copyProperties(orderItem, stockItem);
+                stockItem.setAsnItemId(item.getOrderItemId())
+                        .setBarcode(taskServiceOne.getBarcode())
+                        .setLocId(loc.getId())
+                        .setId(null)
+                        .setStockId(stock.getId());
+                stockItems.add(stockItem);
+            }
+            if (!stockItemService.saveBatch(stockItems)) {
+                throw new CoolException("搴撳瓨淇敼鏋跺け璐ワ紒锛�");
+            }
+        });
+        /**淇敼搴撲綅鐘舵�佷负F.鍦ㄥ簱*/
+        List<String> locCodes = tasks.stream().map(Task::getTargLoc).collect(Collectors.toList());
+        if (!locService.update(new LambdaUpdateWrapper<Loc>().set(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_F.type).in(Loc::getCode, locCodes))) {
+            throw new CoolException("搴撲綅鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+        }
     }
-
-
 }

--
Gitblit v1.9.1