#
Junjie
昨天 14cc8925be94a6c07e8e48278afc8f2d4aa284f1
src/main/java/com/zy/core/utils/WmsOperateUtils.java
@@ -82,6 +82,17 @@
    private final ConcurrentMap<String, Boolean> asyncInTaskInflight = new ConcurrentHashMap<>();
    private String buildAsyncInTaskKey(String prefix, String barcode, Integer stationId, Integer taskNo) {
        StringBuilder keyBuilder = new StringBuilder(prefix)
                .append(barcode)
                .append("_")
                .append(stationId);
        if (taskNo != null && taskNo > 0) {
            keyBuilder.append("_").append(taskNo);
        }
        return keyBuilder.toString();
    }
    // 申请入库任务
    public String applyInTask(String barcode, Integer sourceStaNo, Integer locType1) {
        Object systemConfigMapObj = redisUtil.get(RedisKeyType.SYSTEM_CONFIG_MAP.key);
@@ -169,8 +180,12 @@
     * @param locType1    托盘高度
     */
    public void applyInTaskAsync(String barcode, Integer sourceStaNo, Integer locType1) {
        String requestKey = RedisKeyType.ASYNC_WMS_IN_TASK_REQUEST.key + barcode + "_" + sourceStaNo;
        String responseKey = RedisKeyType.ASYNC_WMS_IN_TASK_RESPONSE.key + barcode + "_" + sourceStaNo;
        applyInTaskAsync(barcode, sourceStaNo, null, locType1);
    }
    public void applyInTaskAsync(String barcode, Integer sourceStaNo, Integer taskNo, Integer locType1) {
        String requestKey = buildAsyncInTaskKey(RedisKeyType.ASYNC_WMS_IN_TASK_REQUEST.key, barcode, sourceStaNo, taskNo);
        String responseKey = buildAsyncInTaskKey(RedisKeyType.ASYNC_WMS_IN_TASK_RESPONSE.key, barcode, sourceStaNo, taskNo);
        if (asyncInTaskInflight.putIfAbsent(requestKey, Boolean.TRUE) != null) {
            return;
@@ -192,13 +207,16 @@
                    String response = applyInTask(barcode, sourceStaNo, locType1);
                    if (response != null) {
                        redisUtil.set(responseKey, response, APPLY_IN_TASK_RESPONSE_TTL_SECONDS);
                        News.info("异步WMS入库请求完成,barcode={},stationId={},response={}", barcode, sourceStaNo, response);
                        News.info("异步WMS入库请求完成,barcode={},stationId={},taskNo={},response={}",
                                barcode, sourceStaNo, taskNo, response);
                    } else {
                        redisUtil.set(responseKey, "FAILED", 10);
                        News.error("异步WMS入库请求失败,barcode={},stationId={}", barcode, sourceStaNo);
                        News.error("异步WMS入库请求失败,barcode={},stationId={},taskNo={}",
                                barcode, sourceStaNo, taskNo);
                    }
                } catch (Exception e) {
                    News.error("异步WMS入库请求异常,barcode={},stationId={},error={}", barcode, sourceStaNo, e.getMessage());
                    News.error("异步WMS入库请求异常,barcode={},stationId={},taskNo={},error={}",
                            barcode, sourceStaNo, taskNo, e.getMessage());
                    redisUtil.set(responseKey, "ERROR:" + e.getMessage(), 10);
                } finally {
                    asyncInTaskInflight.remove(requestKey);
@@ -209,7 +227,8 @@
            asyncInTaskInflight.remove(requestKey);
            redisUtil.del(requestKey);
            redisUtil.set(responseKey, "ERROR:ASYNC_QUEUE_FULL", 10);
            News.error("异步WMS入库请求被拒绝,线程池已满,barcode={},stationId={}", barcode, sourceStaNo);
            News.error("异步WMS入库请求被拒绝,线程池已满,barcode={},stationId={},taskNo={}",
                    barcode, sourceStaNo, taskNo);
        }
    }
@@ -221,7 +240,11 @@
     * @return 响应结果,null表示还未完成或未找到
     */
    public String queryAsyncInTaskResponse(String barcode, Integer stationId) {
        String responseKey = RedisKeyType.ASYNC_WMS_IN_TASK_RESPONSE.key + barcode + "_" + stationId;
        return queryAsyncInTaskResponse(barcode, stationId, null);
    }
    public String queryAsyncInTaskResponse(String barcode, Integer stationId, Integer taskNo) {
        String responseKey = buildAsyncInTaskKey(RedisKeyType.ASYNC_WMS_IN_TASK_RESPONSE.key, barcode, stationId, taskNo);
        Object response = redisUtil.get(responseKey);
        if (response != null) {
            // 获取后删除,避免重复处理
@@ -239,7 +262,11 @@
     * @return true表示正在请求中
     */
    public boolean isAsyncRequestInProgress(String barcode, Integer stationId) {
        String requestKey = RedisKeyType.ASYNC_WMS_IN_TASK_REQUEST.key + barcode + "_" + stationId;
        return isAsyncRequestInProgress(barcode, stationId, null);
    }
    public boolean isAsyncRequestInProgress(String barcode, Integer stationId, Integer taskNo) {
        String requestKey = buildAsyncInTaskKey(RedisKeyType.ASYNC_WMS_IN_TASK_REQUEST.key, barcode, stationId, taskNo);
        return asyncInTaskInflight.containsKey(requestKey) || redisUtil.get(requestKey) != null;
    }