From 5b00928c8570a3ba21a1170b4642ef88635d90da Mon Sep 17 00:00:00 2001
From: zwl <1051256694@qq.com>
Date: 星期二, 21 四月 2026 22:45:22 +0800
Subject: [PATCH] 1.对入库拍照功能解耦

---
 src/main/java/com/zy/asrs/service/impl/InboundCameraCaptureServiceImpl.java |   68 ++++++++++++++++++++++++++++++++++
 1 files changed, 68 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/InboundCameraCaptureServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/InboundCameraCaptureServiceImpl.java
index e7906af..249483b 100644
--- a/src/main/java/com/zy/asrs/service/impl/InboundCameraCaptureServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/InboundCameraCaptureServiceImpl.java
@@ -6,8 +6,14 @@
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.core.common.Cools;
 import com.zy.asrs.entity.LocDetl;
+import com.zy.asrs.entity.WrkDetl;
+import com.zy.asrs.entity.WrkDetlLog;
+import com.zy.asrs.entity.WrkMast;
 import com.zy.asrs.service.InboundCameraCaptureService;
 import com.zy.asrs.service.LocDetlService;
+import com.zy.asrs.service.WrkDetlLogService;
+import com.zy.asrs.service.WrkDetlService;
+import com.zy.asrs.service.WrkMastService;
 import com.zy.system.entity.Config;
 import com.zy.system.service.ConfigService;
 import lombok.extern.slf4j.Slf4j;
@@ -44,6 +50,15 @@
 
     @Autowired
     private LocDetlService locDetlService;
+
+    @Autowired
+    private WrkMastService wrkMastService;
+
+    @Autowired
+    private WrkDetlService wrkDetlService;
+
+    @Autowired
+    private WrkDetlLogService wrkDetlLogService;
 
     @Override
     public String capture(Integer sourceStaNo, String locNo, String barcode) {
@@ -83,6 +98,33 @@
     }
 
     @Override
+    public void processPendingCapture(WrkMast wrkMast) {
+        if (wrkMast == null || wrkMast.getWrkNo() == null) {
+            return;
+        }
+        String current = Cools.isEmpty(wrkMast.getMemo()) ? CAPTURE_PENDING : wrkMast.getMemo();
+        if (!wrkMastService.updateMemoIfCurrent(wrkMast.getWrkNo(), current, CAPTURE_RUNNING)) {
+            return;
+        }
+
+        String status = CAPTURE_FAILED;
+        try {
+            String pic = capture(wrkMast.getSourceStaNo(), wrkMast.getLocNo(), wrkMast.getBarcode());
+            if (!Cools.isEmpty(pic)) {
+                writeBackPic(wrkMast, pic);
+                status = CAPTURE_DONE;
+            }
+        } catch (Exception e) {
+            log.warn("鍏ュ簱寮傛鎶撴媿澶勭悊寮傚父锛歸orkNo={}, sourceStaNo={}, locNo={}, barcode={}",
+                    wrkMast.getWrkNo(), wrkMast.getSourceStaNo(), wrkMast.getLocNo(), wrkMast.getBarcode(), e);
+        } finally {
+            if (!wrkMastService.updateMemoIfCurrent(wrkMast.getWrkNo(), CAPTURE_RUNNING, status)) {
+                log.info("鍏ュ簱鎶撴媿鐘舵�佸洖鍐欒烦杩囷細workNo={}, status={}", wrkMast.getWrkNo(), status);
+            }
+        }
+    }
+
+    @Override
     public List<String> resolvePicUrls(String pic) {
         CaptureConfig config = loadConfig();
         String prefix = config == null ? "" : config.imageUrlPrefix;
@@ -113,6 +155,32 @@
         return new ArrayList<>(urls);
     }
 
+    private void writeBackPic(WrkMast wrkMast, String pic) {
+        Date now = new Date();
+
+        WrkDetl wrkDetl = new WrkDetl();
+        wrkDetl.setPic(pic);
+        wrkDetl.setModiTime(now);
+        wrkDetlService.update(wrkDetl, new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
+
+        WrkDetlLog wrkDetlLog = new WrkDetlLog();
+        wrkDetlLog.setPic(pic);
+        wrkDetlLog.setModiTime(now);
+        EntityWrapper<WrkDetlLog> logWrapper = new EntityWrapper<>();
+        logWrapper.eq("wrk_no", wrkMast.getWrkNo());
+        if (wrkMast.getIoTime() != null) {
+            logWrapper.eq("io_time", wrkMast.getIoTime());
+        }
+        wrkDetlLogService.update(wrkDetlLog, logWrapper);
+
+        if (!Cools.isEmpty(wrkMast.getLocNo())) {
+            LocDetl locDetl = new LocDetl();
+            locDetl.setPic(pic);
+            locDetl.setModiTime(now);
+            locDetlService.update(locDetl, new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getLocNo()));
+        }
+    }
+
     private boolean captureOne(String captureUrl, Integer sourceStaNo, int index, JSONObject camera, String picName) {
         String ip = camera.getString("ip");
         if (Cools.isEmpty(ip)) {

--
Gitblit v1.9.1