From 5534c554528a360110f6f1acc04190a2fee6de98 Mon Sep 17 00:00:00 2001
From: verou <857149855@qq.com>
Date: 星期一, 07 四月 2025 15:42:45 +0800
Subject: [PATCH] Merge branch 'devlop' of http://47.97.1.152:5880/r/wms-master into devlop

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java      |   15 ++
 rsf-server/src/main/java/com/vincent/rsf/server/system/constant/DictTypeCode.java               |    5 
 rsf-admin/src/page/taskLog/TaskLogList.jsx                                                      |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/PakinIOStatus.java                |   27 ++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java |    4 
 rsf-server/src/main/java/com/vincent/rsf/server/api/entity/enums/OrderType.java                 |    3 
 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java            |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java  |    3 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderService.java            |    1 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java             |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java         |  149 +++++++++---------------
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java                    |    4 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java       |    8 +
 rsf-admin/src/page/taskItemLog/TaskItemLogList.jsx                                              |    1 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Task.java                        |    4 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java   |   78 +++++++++++++
 rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/TaskQueueDto.java                |    3 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java                 |    3 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrder.java                    |   12 ++
 rsf-admin/.env                                                                                  |    2 
 rsf-server/src/main/resources/application-dev.yml                                               |    7 
 21 files changed, 226 insertions(+), 109 deletions(-)

diff --git a/rsf-admin/.env b/rsf-admin/.env
index a8ce658..a3c69b2 100644
--- a/rsf-admin/.env
+++ b/rsf-admin/.env
@@ -1,3 +1,3 @@
-VITE_BASE_IP=192.168.4.24
+VITE_BASE_IP=127.0.0.1
 # VITE_BASE_IP=47.76.147.249
 VITE_BASE_PORT=8080
diff --git a/rsf-admin/src/page/taskItemLog/TaskItemLogList.jsx b/rsf-admin/src/page/taskItemLog/TaskItemLogList.jsx
index 3e3c9f2..58c7f4f 100644
--- a/rsf-admin/src/page/taskItemLog/TaskItemLogList.jsx
+++ b/rsf-admin/src/page/taskItemLog/TaskItemLogList.jsx
@@ -111,6 +111,7 @@
                 }}
                 title={"menu.taskItemLog"}
                 filters={filters}
+                empty={false}
                 sort={{ field: "create_time", order: "desc" }}
                 actions={(
                     <TopToolbar>
diff --git a/rsf-admin/src/page/taskLog/TaskLogList.jsx b/rsf-admin/src/page/taskLog/TaskLogList.jsx
index ff2084f..5ffad18 100644
--- a/rsf-admin/src/page/taskLog/TaskLogList.jsx
+++ b/rsf-admin/src/page/taskLog/TaskLogList.jsx
@@ -110,7 +110,7 @@
                     marginRight: !!drawerVal ? `${PAGE_DRAWER_WIDTH}px` : 0,
                 }}
                 title={"menu.taskLog"}
-                empty={<EmptyData onClick={() => { setCreateDialog(true) }} />}
+                empty={false}
                 filters={filters}
                 sort={{ field: "create_time", order: "desc" }}
                 actions={(
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 b9cd28e..330b9e5 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
@@ -234,7 +234,7 @@
 
     @ApiOperation("浠诲姟涓婃灦")
     @PreAuthorize("hasAuthority('manager:qlyInspect:update')")
-    @PostMapping("/task/stock")
+    @PostMapping("/task/public/{code}")
     public R taskToLocs(@PathVariable String code) throws Exception {
         if (Objects.isNull(code)) {
             return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
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
index 36c9383..dbe935a 100644
--- 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
@@ -1,6 +1,5 @@
 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;
@@ -14,7 +13,7 @@
 @Data
 @Accessors(chain = true)
 @ApiModel(value = "TaskQueueDto", description = "浠诲姟淇℃伅")
-public class TaskQueueDto implements Serializable {
+public class TaskQueueDto implements Serializable{
 
     @ApiModelProperty("浠诲姟涓诲崟")
     private Task task;
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/enums/OrderType.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/enums/OrderType.java
index 5ca9670..023b103 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/enums/OrderType.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/enums/OrderType.java
@@ -12,7 +12,8 @@
     ORDER_PURCHASE_IN("purchase", "閲囪喘鍏ュ簱鍗�"),
     ORDER_OUT("out", "鍑哄簱鍗�"),
     ORDER_IN("in", "鍏ュ簱鍗�"),
-    ORDER_RECEIPT("receipt", "鏀惰揣鍗�")
+    ORDER_RECEIPT("receipt", "鏀惰揣鍗�"),
+    ORDER_PLAT_IN("plat in", "骞冲簱鍏ュ簱鍗�"),
 
     ;
 
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 150d18a..df57841 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
@@ -6,6 +6,7 @@
 import com.vincent.rsf.framework.exception.CoolException;
 import com.vincent.rsf.server.api.controller.params.*;
 import com.vincent.rsf.server.api.entity.dto.*;
+import com.vincent.rsf.server.api.entity.enums.OrderType;
 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;
@@ -201,7 +202,7 @@
         List<ReceiptDetlsDto> receipts = params.getReceipts();
         List<WarehouseAreasItem> allOrders = new ArrayList<>();
 
-        double receiptQty = receipts.stream().mapToDouble(ReceiptDetlsDto::getReceiptQty).sum();
+        Double receiptQty = receipts.stream().mapToDouble(ReceiptDetlsDto::getReceiptQty).sum();
 
         String asnCode = receipts.stream().findFirst().get().getAsnCode();
 
@@ -210,7 +211,9 @@
         if (Objects.isNull(asnOrder)) {
             throw new CoolException("鏁版嵁閿欒锛氫富鍗曚笉瀛樺湪锛侊紒");
         }
-        asnOrder.setQty(receiptQty);
+        /**鏀惰揣鏁伴噺绱姞锛�1. 浼氬嚭瓒呮敹鎯呭喌 2. 浼氭湁鏀惰揣涓嶈冻鎯呭喌*/
+        Double rcptedQty = asnOrder.getQty() + receiptQty;
+        asnOrder.setQty(rcptedQty);
 
         if (!asnOrderMapper.updateById(asnOrder)) {
             throw new CoolException("宸叉敹璐ф暟閲忎慨鏀瑰け璐ワ紒锛�");
@@ -234,40 +237,14 @@
             if (Objects.isNull(orderItem)) {
                 throw new CoolException("閫氱煡鍗曟槑缁嗕笉瀛樺湪锛侊紒");
             }
-            if (Objects.isNull(dto.getReceiptQty()) || Double.compare(dto.getReceiptQty(), 0.0) == 0) {
-                throw new CoolException("鏀惰揣鏁伴噺涓嶈兘涓洪浂锛侊紒");
-            }
-            orderItem.setQty(dto.getReceiptQty())
-                    .setProdTime(dto.getProdTime());
-
-            if (asnOrderItemMapper.updateById(orderItem) < 1) {
-                throw new CoolException("閫氱煡鍗曟槑缁嗘暟閲忎慨鏀瑰け璐ワ紒锛�");
-            }
-
-            WarehouseAreasItem item = new WarehouseAreasItem();
-//            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-//            String format = null;
-//            if (Objects.isNull(dto.getProdTime())) {
-//                 format = dateFormat.format(dto.getProdTime());
+//            if (Objects.isNull(dto.getReceiptQty()) || Double.compare(dto.getReceiptQty(), 0.0) == 0) {
+//                throw new CoolException("鏀惰揣鏁伴噺涓嶈兘涓洪浂锛侊紒");
 //            }
-            item.setBarcode(dto.getBarcode())
-                    .setAreaName(areasItem.getName())
-                    .setAreaId(areasItem.getId())
-                    .setProdTime(dto.getProdTime())
-                    .setWeight(dto.getWeigth())
+            Double itemRcptQty = dto.getReceiptQty() + orderItem.getQty();
+            orderItem.setQty(itemRcptQty)
+                    .setSplrBatch(dto.getSplrBatch())
                     .setStockUnit(dto.getStockUnit())
-                    .setBatch(SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_RECEIPT_BATCH, dto))
-                    .setAnfme(dto.getReceiptQty())
-                    .setSplrBtch(dto.getSplrBatch())
-                    .setMatnrCode(matnr.getCode())
-                    .setMatnrId(matnr.getId())
-                    .setMatnrName(matnr.getName())
-                    //搴撳瓨鍗曚綅涓烘渶灏忓崟浣�
-                    .setUnit(dto.getStockUnit())
-                    .setStockUnit(dto.getStockUnit())
-                    .setWeight(matnr.getWeight())
-                    .setShipperId(matnr.getShipperId());
-                    //TODO 渚涘簲鍟嗘爣璇嗘湭璁剧疆锛屾爣璇嗙敱PO鍗曚緵搴斿晢缂栫爜杞崲
+                    .setProdTime(dto.getProdTime());
 
             if (!Objects.isNull(fields)) {
                 if (!Objects.isNull(dto.getExtendFields())) {
@@ -286,76 +263,65 @@
                                         .setValue(extendFields.get(key).toString())
                                         .setUuid(uuid16);
                                 fieldsItems.add(fieldsItem);
-                                //鍞竴鏍囪瘑鍏ュ簱
-                                item.setFieldsIndex(uuid16);
                             }
                         });
                     });
                     if (!fieldsItemService.saveBatch(fieldsItems)) {
                         throw new CoolException("鎵╁睍瀛楁淇濆瓨澶辫触锛侊紒");
                     }
+                    orderItem.setFieldsIndex(uuid16);
                 }
             }
+
+            if (asnOrderItemMapper.updateById(orderItem) < 1) {
+                throw new CoolException("閫氱煡鍗曟槑缁嗘暟閲忎慨鏀瑰け璐ワ紒锛�");
+            }
+
+            WarehouseAreasItem item = new WarehouseAreasItem();
+//            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+//            String format = null;
+//            if (Objects.isNull(dto.getProdTime())) {
+//                 format = dateFormat.format(dto.getProdTime());
+//            }
+            item.setBarcode(dto.getBarcode())
+                    .setAreaName(areasItem.getName())
+                    .setAreaId(areasItem.getId())
+                    .setProdTime(dto.getProdTime())
+                    .setWeight(dto.getWeigth())
+                    .setStockUnit(dto.getStockUnit())
+                    .setBatch(SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_RECEIPT_BATCH, dto))
+                    .setAnfme(itemRcptQty)
+                    .setSplrBtch(dto.getSplrBatch())
+                    .setMatnrCode(matnr.getCode())
+                    .setMatnrId(matnr.getId())
+                    .setMatnrName(matnr.getName())
+                    //搴撳瓨鍗曚綅涓烘渶灏忓崟浣�
+                    .setUnit(dto.getStockUnit())
+                    .setStockUnit(dto.getStockUnit())
+                    .setWeight(matnr.getWeight())
+                    .setFieldsIndex(orderItem.getFieldsIndex())
+                    .setShipperId(matnr.getShipperId());
+                    //TODO 渚涘簲鍟嗘爣璇嗘湭璁剧疆锛屾爣璇嗙敱PO鍗曚緵搴斿晢缂栫爜杞崲
+
+
             allOrders.add(item);
         });
 
         if (!warehouseAreasItemService.saveBatch(allOrders)) {
             throw new CoolException("鏀惰揣澶辫触锛侊紒");
         }
-
-        //鑾峰彇閲囪喘鏁伴噺
-        double purQty = receipts.stream().mapToDouble(ReceiptDetlsDto::getPurQty).sum();
-
-        BigDecimal subtract = BigDecimal.valueOf(receiptQty).subtract(BigDecimal.valueOf(purQty));
-        //鍒ゆ柇宸叉敹璐ф暟閲忔槸鍚﹀皬浜庣瓑浜庨噰璐暟閲�
-        if (subtract.compareTo(new BigDecimal("0.0")) <= 0) {
-            asnOrder.setRleStatus(Short.valueOf("1"));
-            //鏃ュ織琛ㄦ搷浣�
-            operateOrderLogs(asnOrder);
-        }
-
+//        //鑾峰彇閲囪喘鏁伴噺
+//        double purQty = receipts.stream().mapToDouble(ReceiptDetlsDto::getPurQty).sum();
+//
+//        BigDecimal subtract = BigDecimal.valueOf(receiptQty).subtract(BigDecimal.valueOf(purQty));
+//        //鍒ゆ柇宸叉敹璐ф暟閲忔槸鍚﹀皬浜庣瓑浜庨噰璐暟閲�
+//        if (subtract.compareTo(new BigDecimal("0.0")) <= 0) {
+//            asnOrder.setRleStatus(Short.valueOf("1"));
+//            //鏃ュ織琛ㄦ搷浣�
+//            operateOrderLogs(asnOrder);
+//        }
         return R.ok("鎿嶄綔鎴愬姛");
     }
-
-    /**
-     * @author Ryan
-     * @description 鍒犻櫎鍘熶富鍗曞強鏄庣粏锛屽姞鍏ュ巻鍙叉。
-     * @param
-     * @return
-     * @time 2025/3/19 19:53
-     */
-    private void operateOrderLogs(AsnOrder asnOrder) {
-        if (!asnOrderMapper.removeById(asnOrder.getId())) {
-            throw new CoolException("鍘熷崟鎹垹闄ゅけ璐ワ紒锛�");
-        }
-
-        AsnOrderLog orderLog = new AsnOrderLog();
-        BeanUtils.copyProperties(asnOrder, orderLog);
-        orderLog.setAsnId(asnOrder.getId());
-
-        if (!asnOrderLogService.save(orderLog)) {
-            throw new CoolException("涓诲崟鍘嗗彶妗f坊鍔犲け璐ワ紒锛�");
-        }
-
-        List<AsnOrderItemLog> logs = new ArrayList<>();
-        List<AsnOrderItem> items = asnOrderItemMapper.selectList(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnId, asnOrder.getId()));
-        items.forEach(item -> {
-            AsnOrderItemLog itemLog = new AsnOrderItemLog();
-            BeanUtils.copyProperties(item, itemLog);
-            itemLog.setAsnItemId(itemLog.getId())
-                    .setAsnId(item.getAsnId());
-            logs.add(itemLog);
-        });
-
-        if (!asnOrderItemLogService.saveBatch(logs)) {
-            throw new CoolException("閫氱煡鍗曟槑缁嗗巻鍙叉。淇濆瓨澶辫触锛侊紒");
-        }
-
-        if (asnOrderItemMapper.delete(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnId, asnOrder.getId())) < 1) {
-            throw new CoolException("鍘熷崟鎹槑缁嗗垹闄ゅけ璐ワ紒锛�");
-        }
-    }
-
 
     /**
      * @author Ryan
@@ -624,7 +590,10 @@
             throw new CoolException("鍗曟嵁鏄庣粏涓嶈兘涓虹┖锛侊紒");
         }
         Long OrderId = params.getItemList().stream().findFirst().get().getAsnId();
-        AsnOrder order = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getId, OrderId));
+        /**鑾峰彇骞冲簱璁㈠崟*/
+        AsnOrder order = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>()
+                .eq(AsnOrder::getId, OrderId)
+                .eq(AsnOrder::getType, OrderType.ORDER_PLAT_IN.type));
         if (Objects.isNull(order)) {
             throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
         }
@@ -681,7 +650,7 @@
             throw new CoolException("鎷栫洏浠诲姟涓嶅瓨鍦紒锛�");
         }
         List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
-        if (!taskItems.isEmpty()) {
+        if (taskItems.isEmpty()) {
             throw new CoolException("鎷栫洏浠诲姟鏄庣粏涓嶅瓨鍦紒锛�");
         }
         TaskQueueDto queueDto = new TaskQueueDto();
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java
index 108115b..0ddc29c 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java
@@ -190,4 +190,19 @@
         }
         return R.ok(asnOrderService.batchUpdate(params, getLoginUserId()));
     }
+
+    @ApiOperation("涓�閿敹璐�")
+    @PostMapping("/asnOrder/complete/{id}")
+    @PreAuthorize("hasAuthority('manager:asnOrder:update')")
+    public R completeOrder(@PathVariable Long id) {
+        if (Objects.isNull(id)) {
+            return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        return asnOrderService.completeOrder(id, getLoginUserId());
+    }
+
+
+
+
+
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrder.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrder.java
index 9adbe56..9ea862d 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrder.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrder.java
@@ -210,6 +210,18 @@
 //            null    // 澶囨敞
 //    );
 
+    public String getExceStatus$() {
+        if (Cools.isEmpty(this.exceStatus)){
+            return "";
+        }
+        DictDataService dictDataService = SpringUtils.getBean(DictDataService.class);
+        DictData dictData = dictDataService.getOne(new LambdaQueryWrapper<DictData>().eq(DictData::getDictTypeCode, DictTypeCode.DICT_ASN_EXCE_STATUS).eq(DictData::getValue, this.exceStatus));
+        if (Objects.isNull(dictData)) {
+            return null;
+        }
+        return dictData.getLabel();
+    }
+
     public String getType$(){
         if (Cools.isEmpty(this.type)){
             return "";
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java
index 59d39db..346f37e 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java
@@ -112,6 +112,9 @@
     @ApiModelProperty(value= "鐘舵�� 1: 姝e父  0: 鍐荤粨  ")
     private Integer status;
 
+    @ApiModelProperty("鎵ц鐘舵��")
+    private Short exceStatus;
+
     /**
      * 鏄惁鍒犻櫎 1: 鏄�  0: 鍚�  
      */
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Task.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Task.java
index 7d2e4a6..278ef22 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Task.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Task.java
@@ -34,10 +34,8 @@
 @Data
 @Accessors(chain = true)
 @TableName("man_task")
+@ApiModel(value = "Task", description = "浠诲姟妗�")
 public class Task implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
     /**
      * ID
      */
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 3b7d24a..acbbbd4 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
@@ -31,10 +31,8 @@
 @Data
 @Accessors(chain = true)
 @TableName("man_task_item")
+@ApiModel(value = "TaskItem", description = "浠诲姟妗f槑缁�")
 public class TaskItem implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
     /**
      * ID
      */
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/PakinIOStatus.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/PakinIOStatus.java
new file mode 100644
index 0000000..6cf50cb
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/PakinIOStatus.java
@@ -0,0 +1,27 @@
+package com.vincent.rsf.server.manager.enums;
+
+/**
+ * @author Ryan
+ * @version 1.0
+ * @title PakinIOStatus
+ * @description
+ * @create 2025/4/7 08:48
+ */
+public enum PakinIOStatus {
+
+    //璐ㄦ鐘舵��
+    PAKIN_IO_STATUS_HOLD("0", "寰呭叆搴�"),
+    QLY_ISPT_STAS_DONE("1", "缁勬嫋瀹屾垚"),
+    QLY_ISPT_STAS_TASK_EXCE("2", "浠诲姟鎵ц涓�"),
+    QLY_ISPT_STAS_TASK_DONE("3", "浠诲姟瀹屾垚")
+            ;
+
+    PakinIOStatus(String val, String desc) {
+        this.val = val;
+        this.desc = desc;
+    }
+
+    public String val;
+    public String desc;
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
index c270e68..86d45c9 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
@@ -68,7 +68,7 @@
      */
     @Scheduled(cron = "0 0/05 * * * ?  ")
     @Transactional(rollbackFor = Exception.class)
-    public void genAsnOrder() {
+    public synchronized void genAsnOrder() {
         //鍒ゆ柇鏄惁寮�鍚嚜鍔ㄧ敓鎴怉SN鍗曟嵁
         if (!flowProperties.getFlagAutoAsn()) {
             return;
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderService.java
index 81ac399..64d420a 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderService.java
@@ -21,4 +21,5 @@
 
     boolean batchUpdate(BatchUpdateParam params, Long loginUserId);
 
+    R completeOrder(Long id, Long loginUserId);
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
index b385eed..99b749e 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
@@ -11,15 +11,20 @@
 import com.vincent.rsf.server.manager.controller.params.AsnOrderAndItemsParams;
 import com.vincent.rsf.server.manager.controller.params.BatchUpdateParam;
 import com.vincent.rsf.server.manager.entity.AsnOrderItem;
+import com.vincent.rsf.server.manager.entity.AsnOrderItemLog;
+import com.vincent.rsf.server.manager.entity.AsnOrderLog;
 import com.vincent.rsf.server.manager.mapper.AsnOrderMapper;
 import com.vincent.rsf.server.manager.entity.AsnOrder;
 import com.vincent.rsf.server.manager.mapper.PurchaseMapper;
+import com.vincent.rsf.server.manager.service.AsnOrderItemLogService;
 import com.vincent.rsf.server.manager.service.AsnOrderItemService;
+import com.vincent.rsf.server.manager.service.AsnOrderLogService;
 import com.vincent.rsf.server.manager.service.AsnOrderService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.vincent.rsf.server.system.constant.SerialRuleCode;
 import com.vincent.rsf.server.system.mapper.SerialRuleMapper;
 import com.vincent.rsf.server.system.utils.SerialRuleUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -46,6 +51,10 @@
     private PurchaseMapper purchaseMapper;
     @Autowired
     private AsnOrderItemService asnOrderItemService;
+    @Autowired
+    private AsnOrderLogService asnOrderLogService;
+    @Autowired
+    private AsnOrderItemLogService asnOrderItemLogService;
     @Resource
     private SerialRuleMapper serialRuleMapper;
 
@@ -171,6 +180,75 @@
                         .set(!Objects.isNull(order.getWkType()), AsnOrder::getWkType, order.getWkType())
                         .set(!Objects.isNull(order.getExceStatus()), AsnOrder::getExceStatus, order.getExceStatus())
                 .set(AsnOrder::getUpdateBy, userId));
+    }
 
+    /**
+     * @param id
+     * @param loginUserId
+     * @return
+     * @author Ryan
+     * @description 涓�閿敹璐�
+     * @time 2025/4/3 15:45
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R completeOrder(Long id, Long loginUserId) {
+        AsnOrder asnOrder = this.getById(id);
+        if (Objects.isNull(asnOrder)) {
+            throw new CoolException("鍗曟嵁涓嶅瓨鍦�!!");
+        }
+        //涓�閿姞鍏ュ巻鍙叉。
+        try {
+            operateOrderLogs(asnOrder);
+        } catch (Exception e) {
+            throw new CoolException("鏀惰揣瀹屾垚澶辫触锛侊紒");
+        }
+        return R.ok("鏀惰揣鎴愬姛锛侊紒");
+    }
+
+    /**
+     * @author Ryan
+     * @description 鍒犻櫎鍘熶富鍗曞強鏄庣粏锛屽姞鍏ュ巻鍙叉。
+     * @param
+     * @return
+     * @time 2025/3/19 19:53
+     */
+    @Transactional(rollbackFor = Exception.class)
+    private void operateOrderLogs(AsnOrder asrder) throws Exception{
+        if (Objects.isNull(asrder) || Objects.isNull(asrder.getId())) {
+            throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        AsnOrder order = this.getById(asrder.getId());
+        AsnOrderLog orderLog = new AsnOrderLog();
+        order.setExceStatus(Short.valueOf("2"));
+        BeanUtils.copyProperties(order, orderLog);
+        orderLog.setId(null);
+        orderLog.setAsnId(order.getId());
+
+        if (!this.saveOrUpdate(order)) {
+            throw new CoolException("鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+        }
+        if (!asnOrderLogService.save(orderLog)) {
+            throw new CoolException("涓诲崟鍘嗗彶妗f坊鍔犲け璐ワ紒锛�");
+        }
+        List<AsnOrderItemLog> logs = new ArrayList<>();
+        List<AsnOrderItem> items = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnId, order.getId()));
+        items.forEach(item -> {
+            AsnOrderItemLog itemLog = new AsnOrderItemLog();
+            BeanUtils.copyProperties(item, itemLog);
+            itemLog.setAsnItemId(itemLog.getId())
+                    .setAsnId(item.getAsnId());
+            logs.add(itemLog);
+        });
+
+        if (!asnOrderItemLogService.saveBatch(logs)) {
+            throw new CoolException("閫氱煡鍗曟槑缁嗗巻鍙叉。淇濆瓨澶辫触锛侊紒");
+        }
+        if (!asnOrderItemService.remove(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnId, order.getId()))) {
+            throw new CoolException("鍘熷崟鎹槑缁嗗垹闄ゅけ璐ワ紒锛�");
+        }
+        if (!this.removeById(asrder.getId())) {
+            throw new CoolException("鍘熷崟鎹垹闄ゅけ璐ワ紒锛�");
+        }
     }
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java
index c64cd4a..e826e7f 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.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.common.R;
 import com.vincent.rsf.framework.exception.CoolException;
 import com.vincent.rsf.server.manager.controller.params.IsptOrderParam;
@@ -171,6 +172,9 @@
                 throw new CoolException("鏄庣粏淇濆瓨澶辫触锛侊紒");
             }
         }
+        if (!asnOrderService.update(new LambdaUpdateWrapper<AsnOrder>().in(AsnOrder::getId, param.getIds()).set(AsnOrder::getNtyStatus, 1))) {
+            throw new CoolException("鎶ユ鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+        }
         return R.ok("淇濆瓨鎴愬姛锛侊紒");
     }
 }
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 e902543..49e979b 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
@@ -8,6 +8,7 @@
 import com.vincent.rsf.framework.exception.CoolException;
 import com.vincent.rsf.server.api.entity.enums.TaskType;
 import com.vincent.rsf.server.manager.entity.*;
+import com.vincent.rsf.server.manager.enums.PakinIOStatus;
 import com.vincent.rsf.server.manager.mapper.TaskMapper;
 import com.vincent.rsf.server.manager.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -67,7 +68,9 @@
         }
         /**鑾峰彇缁勬嫋*/
         List<Long> ids = waitPakin.stream().map(WaitPakin::getId).collect(Collectors.toList());
-        List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().in(WaitPakin::getId, ids));
+        List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>()
+                .in(WaitPakin::getId, ids)
+                .eq(WaitPakin::getIoStatus, Short.parseShort(PakinIOStatus.QLY_ISPT_STAS_DONE.val)));
         if (waitPakins.isEmpty()) {
             throw new CoolException("缁勬嫋淇℃伅涓嶅瓨鍦紒锛�");
         }
@@ -118,6 +121,9 @@
             }
         });
 
+        waitPakinService.update(new LambdaUpdateWrapper<WaitPakin>()
+                        .in(WaitPakin::getId, ids)
+                .set(WaitPakin::getIoStatus, PakinIOStatus.QLY_ISPT_STAS_TASK_EXCE.val));
         return R.ok("浠诲姟鐢熸垚瀹屾瘯锛�");
     }
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java
index e2c40cb..70ce7d0 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java
@@ -6,6 +6,7 @@
 import com.vincent.rsf.server.manager.controller.params.PakinItem;
 import com.vincent.rsf.server.manager.controller.params.WaitPakinParam;
 import com.vincent.rsf.server.manager.entity.*;
+import com.vincent.rsf.server.manager.enums.PakinIOStatus;
 import com.vincent.rsf.server.manager.mapper.WaitPakinMapper;
 import com.vincent.rsf.server.manager.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -79,7 +80,7 @@
         }
         pakin.setCode(ruleCode)
                 //鐘舵�佷慨鏀逛负鍏ュ簱涓�
-                .setIoStatus(Short.parseShort("1"))
+                .setIoStatus(Short.parseShort(PakinIOStatus.QLY_ISPT_STAS_DONE.val))
                 .setAnfme(sum)
                 .setBarcode(waitPakin.getBarcode());
         if (!this.save(pakin)) {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/DictTypeCode.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/DictTypeCode.java
index 34fb329..3239e46 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/DictTypeCode.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/DictTypeCode.java
@@ -49,4 +49,9 @@
      */
     public final static String DICT_INSPECT_RESULT = "sys_inspect_result";
 
+    /**
+     * ASN璁㈠崟鎵ц鐘舵��
+     */
+    public final static String DICT_ASN_EXCE_STATUS = "sys_asn_exce_status";
+
 }
diff --git a/rsf-server/src/main/resources/application-dev.yml b/rsf-server/src/main/resources/application-dev.yml
index 888318c..1afc3c5 100644
--- a/rsf-server/src/main/resources/application-dev.yml
+++ b/rsf-server/src/main/resources/application-dev.yml
@@ -12,11 +12,10 @@
       matching-strategy: ANT_PATH_MATCHER
   datasource:
     driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://192.168.4.24:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
-    username: root
+    url: jdbc:mysql://47.76.147.249:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+#    username: root
 #    url: jdbc:mysql://localhost:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
-#    username: rsf
-
+    username: rsf
     password: 34821015
     type: com.alibaba.druid.pool.DruidDataSource
     druid:

--
Gitblit v1.9.1