Просмотр исходного кода

feat: 补货操作自动创建上货记录

- replenishStock成功后自动创建StockRecord(status=已完成)
- 同步写入StockRecordItem明细(商品/数量/补货后库存)
- stockType=2(补货)

Co-Authored-By: Claude <noreply@anthropic.com>
skyline 11 часов назад
Родитель
Сommit
3be56a3077

+ 47 - 0
haha-admin/src/main/java/com/haha/admin/controller/ReplenisherOperationController.java

@@ -8,14 +8,19 @@ import com.haha.common.enums.ReplenishmentOrderStatusEnum;
 import com.haha.common.exception.BusinessException;
 import com.haha.common.vo.PageResult;
 import com.haha.common.vo.Result;
+import com.haha.common.enums.StockRecordStatus;
 import com.haha.entity.Device;
 import com.haha.entity.DeviceInventory;
 import com.haha.entity.InventoryLog;
 import com.haha.entity.Replenisher;
 import com.haha.entity.ReplenishmentOrder;
 import com.haha.entity.ReplenishmentOrderItem;
+import com.haha.entity.StockRecord;
+import com.haha.entity.StockRecordItem;
 import com.haha.entity.dto.ReplenishDTO;
 import com.haha.mapper.ReplenishmentOrderItemMapper;
+import com.haha.mapper.StockRecordItemMapper;
+import com.haha.mapper.StockRecordMapper;
 import com.haha.service.DeviceInventoryService;
 import com.haha.service.DeviceService;
 import com.haha.service.InventoryLogService;
@@ -48,6 +53,8 @@ public class ReplenisherOperationController {
     private final ReplenishmentOrderService replenishmentOrderService;
     private final InventoryLogService inventoryLogService;
     private final ReplenishmentOrderItemMapper orderItemMapper;
+    private final StockRecordMapper stockRecordMapper;
+    private final StockRecordItemMapper stockRecordItemMapper;
 
     /**
      * 获取当前补货员信息
@@ -372,6 +379,46 @@ public class ReplenisherOperationController {
             }
         }
 
+        // 创建上货记录
+        if (successCount > 0) {
+            try {
+                StockRecord record = new StockRecord();
+                record.setDeviceId(dto.getDeviceId());
+                record.setStockType(2); // 补货
+                record.setStockerId(replenisher.getId());
+                record.setStockerName(replenisher.getName());
+                record.setStockerPhone(replenisher.getPhone());
+                record.setStatus(StockRecordStatus.COMPLETED.getCode());
+                record.setTotalItems(successCount);
+                record.setTotalQuantity(results.stream()
+                        .filter(r -> Boolean.TRUE.equals(r.get("success")))
+                        .mapToInt(r -> ((Number) r.get("quantity")).intValue()).sum());
+                record.setStartTime(java.time.LocalDateTime.now());
+                record.setEndTime(java.time.LocalDateTime.now());
+                record.setCreateTime(java.time.LocalDateTime.now());
+                record.setUpdateTime(java.time.LocalDateTime.now());
+                stockRecordMapper.insert(record);
+
+                // 创建明细
+                for (Map<String, Object> r : results) {
+                    if (!Boolean.TRUE.equals(r.get("success"))) continue;
+                    StockRecordItem item = new StockRecordItem();
+                    item.setRecordId(record.getId());
+                    item.setDeviceId(dto.getDeviceId());
+                    item.setProductId(((Number) r.get("productId")).longValue());
+                    item.setProductName((String) r.get("productName"));
+                    item.setQuantity(((Number) r.get("quantity")).intValue());
+                    item.setAfterStock(((Number) r.get("afterStock")).intValue());
+                    item.setCreateTime(java.time.LocalDateTime.now());
+                    stockRecordItemMapper.insert(item);
+                }
+
+                log.info("[补货操作] 上货记录创建成功: recordId={}, items={}", record.getId(), successCount);
+            } catch (Exception e) {
+                log.error("[补货操作] 创建上货记录失败: deviceId={}, error={}", dto.getDeviceId(), e.getMessage());
+            }
+        }
+
         // 如果关联了补货单,自动完成
         if (dto.getOrderId() != null && successCount > 0) {
             try {