自动化立体仓库 - WMS系统
zwl
6 天以前 38501f5760daefd634e00099ebe7019fd7247731
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("入库异步抓拍处理异常:workNo={}, 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)) {