diff --git a/huaheng-wms-core/src/main/java/org/jeecg/JeecgSystemApplication.java b/huaheng-wms-core/src/main/java/org/jeecg/JeecgSystemApplication.java
index c6b2cb4..79a828b 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/JeecgSystemApplication.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/JeecgSystemApplication.java
@@ -18,6 +18,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
 import org.springframework.boot.builder.SpringApplicationBuilder;
 import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+import org.springframework.cache.annotation.EnableCaching;
 import org.springframework.context.ConfigurableApplicationContext;
 import org.springframework.core.env.Environment;
 
@@ -28,6 +29,7 @@ import net.bytebuddy.asm.Advice.This;
  * 单体启动类(采用此类启动为单体模式)
  */
 @Slf4j
+@EnableCaching
 @SpringBootApplication
 @EnableAutoConfiguration(exclude = {MongoAutoConfiguration.class})
 public class JeecgSystemApplication extends SpringBootServletInitializer {
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/acs/controller/AcsController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/acs/controller/AcsController.java
index 0320703..e0de00c 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/acs/controller/AcsController.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/acs/controller/AcsController.java
@@ -15,9 +15,9 @@ import org.jeecg.modules.wms.framework.aspectj.PassApiAuthentication;
 import org.jeecg.modules.wms.framework.aspectj.lang.annotation.ApiLogger;
 import org.jeecg.modules.wms.framework.controller.HuahengBaseController;
 import org.jeecg.modules.wms.task.agvTask.service.IAgvTaskService;
+import org.jeecg.utils.OkHttpUtils;
 import org.jeecg.utils.StringUtils;
 import org.jeecg.utils.constant.QuantityConstant;
-import org.jeecg.utils.http.OkHttpUtils;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -47,7 +47,8 @@ public class AcsController extends HuahengBaseController {
     @ResponseBody
     @PostMapping(value = "/testTokenCheck")
     public Result<?> testTokenCheck(@RequestBody Map<String, String> paramMap, HttpServletRequest request) {
-        String url = "http://127.0.0.1:8080/wms/api/wms/acs/testTokenCheck";
+//        String url = "http://127.0.0.1:8080/wms/api/wms/acs/testTokenCheck";
+        String url = addressService.getUrlByParam(QuantityConstant.ADDRESS_ERP_BACK_RECEIPT);
         String body = OkHttpUtils.sendPostByJsonStr(url, JSON.toJSONString(paramMap));
         return Result.ok(body);
     }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/acs/service/impl/AcsServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/acs/service/impl/AcsServiceImpl.java
index 5ab2f0c..30ea8f9 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/acs/service/impl/AcsServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/acs/service/impl/AcsServiceImpl.java
@@ -10,9 +10,9 @@ import org.jeecg.modules.wms.config.location.entity.Location;
 import org.jeecg.modules.wms.config.location.service.ILocationService;
 import org.jeecg.modules.wms.task.agvTask.entity.AgvTask;
 import org.jeecg.modules.wms.task.agvTask.service.IAgvTaskService;
+import org.jeecg.utils.OkHttpUtils;
 import org.jeecg.utils.StringUtils;
 import org.jeecg.utils.constant.QuantityConstant;
-import org.jeecg.utils.http.OkHttpUtils;
 import org.springframework.stereotype.Service;
 
 import com.alibaba.fastjson.JSON;
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/erp/service/impl/ErpServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/erp/service/impl/ErpServiceImpl.java
index 087c8ef..91e5d7e 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/erp/service/impl/ErpServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/erp/service/impl/ErpServiceImpl.java
@@ -38,9 +38,9 @@ import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentDetail;
 import org.jeecg.modules.wms.shipment.shipmentHeader.entity.ShipmentHeader;
 import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentDetailService;
 import org.jeecg.modules.wms.shipment.shipmentHeader.service.IShipmentHeaderService;
+import org.jeecg.utils.OkHttpUtils;
 import org.jeecg.utils.StringUtils;
 import org.jeecg.utils.constant.QuantityConstant;
-import org.jeecg.utils.http.OkHttpUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/impl/MesServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/impl/MesServiceImpl.java
index ca70e23..909c8c4 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/impl/MesServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/mes/servuce/impl/MesServiceImpl.java
@@ -33,9 +33,9 @@ import org.jeecg.modules.wms.task.taskHeader.entity.TaskDetail;
 import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader;
 import org.jeecg.modules.wms.task.taskHeader.service.ITaskDetailService;
 import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService;
+import org.jeecg.utils.OkHttpUtils;
 import org.jeecg.utils.StringUtils;
 import org.jeecg.utils.constant.QuantityConstant;
-import org.jeecg.utils.http.OkHttpUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java
index dba4ffc..28440d9 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java
@@ -35,9 +35,9 @@ import org.jeecg.modules.wms.task.taskHeader.entity.TaskDetail;
 import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader;
 import org.jeecg.modules.wms.task.taskHeader.service.ITaskDetailService;
 import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService;
+import org.jeecg.utils.OkHttpUtils;
 import org.jeecg.utils.StringUtils;
 import org.jeecg.utils.constant.QuantityConstant;
-import org.jeecg.utils.http.OkHttpUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/address/service/impl/AddressServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/address/service/impl/AddressServiceImpl.java
index eb737a6..eb16779 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/address/service/impl/AddressServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/address/service/impl/AddressServiceImpl.java
@@ -6,6 +6,7 @@ import org.apache.commons.math3.analysis.function.Add;
 import org.jeecg.modules.wms.config.address.entity.Address;
 import org.jeecg.modules.wms.config.address.mapper.AddressMapper;
 import org.jeecg.modules.wms.config.address.service.IAddressService;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -40,6 +41,7 @@ public class AddressServiceImpl extends ServiceImpl<AddressMapper, Address> impl
     }
 
     @Override
+    @Cacheable(cacheNames = "getUrlByParam", key = "#root.methodName + '_' + #param")
     public String getUrlByParam(String param) {
         LambdaQueryWrapper<Address> addressLambdaQueryWrapper = Wrappers.lambdaQuery();
         addressLambdaQueryWrapper.eq(Address::getParam, param);
@@ -49,5 +51,4 @@ public class AddressServiceImpl extends ServiceImpl<AddressMapper, Address> impl
         }
         return address.getUrl();
     }
-
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/HuahengBaseController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/HuahengBaseController.java
index d313b3b..83da530 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/HuahengBaseController.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/framework/controller/HuahengBaseController.java
@@ -5,7 +5,7 @@ import java.util.concurrent.TimeUnit;
 import javax.annotation.Nonnull;
 
 import org.jeecg.common.api.vo.Result;
-import org.jeecg.utils.RedissonDistributedLocker;
+import org.jeecg.utils.support.RedissonDistributedLocker;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import cn.hutool.core.date.SystemClock;
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/utils/http/OkHttpUtils.java b/huaheng-wms-core/src/main/java/org/jeecg/utils/OkHttpUtils.java
index 003b5d0..13e4e74 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/utils/http/OkHttpUtils.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/utils/OkHttpUtils.java
@@ -1,4 +1,4 @@
-package org.jeecg.utils.http;
+package org.jeecg.utils;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.TypeReference;
@@ -117,7 +117,7 @@ public class OkHttpUtils {
             }
         } catch (Exception e) {
             String errorString = StrUtil.format("执行GET请求异常!url:{},header:{},param:{} {}", url, JSON.toJSONString(headers), param, e.getMessage());
-            log.error(errorString, e);
+            log.error(errorString);
             ApiLogAspect.setApiLogException(apiLog, e);
             throw new RuntimeException(errorString, e);
         } finally {
@@ -168,7 +168,7 @@ public class OkHttpUtils {
             }
         } catch (Exception e) {
             String errorString = StrUtil.format("执行POST请求异常!url:{},header:{},param:{} {}", url, JSON.toJSONString(headers), param, e.getMessage());
-            log.error(errorString, e);
+            log.error(errorString);
             ApiLogAspect.setApiLogException(apiLog, e);
             throw new RuntimeException(errorString, e);
         } finally {
@@ -193,7 +193,6 @@ public class OkHttpUtils {
         headers.put("Content-Type", "application/json");// 设置发送数据的格式
         Request.Builder builder = new Request.Builder();
         buildHeader(builder, headers);
-        // using above json body as a input to post API call
         RequestBody body = RequestBody.create(MEDIA_TYPE_JSON, jsonString);
         Request request = builder.url(url).post(body).build();
         Response response = null;
@@ -212,7 +211,7 @@ public class OkHttpUtils {
             }
         } catch (Exception e) {
             String errorString = StrUtil.format("执行POST请求异常!url:{},header:{},param:{} {}", url, JSON.toJSONString(headers), jsonString, e.getMessage());
-            log.error(errorString, e);
+            log.error(errorString);
             ApiLogAspect.setApiLogException(apiLog, e);
             throw new RuntimeException(errorString, e);
         } finally {
@@ -260,10 +259,8 @@ public class OkHttpUtils {
             this.maxRentry = maxRentry;
         }
 
+        /** 递归 2次下发请求,如果仍然失败 则返回 null 但是 intercept must not return null. 返回 null 会报 IllegalStateException 异常 */
         public Response intercept(@NotNull Chain chain) throws IOException {
-            /*
-             * 递归 2次下发请求,如果仍然失败 则返回 null 但是 intercept must not return null. 返回 null 会报 IllegalStateException 异常
-             */
             return retry(chain, 0);
         }
 
@@ -283,5 +280,4 @@ public class OkHttpUtils {
             return response;
         }
     }
-
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/utils/StringUtils.java b/huaheng-wms-core/src/main/java/org/jeecg/utils/StringUtils.java
index fd6a744..cf3b904 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/utils/StringUtils.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/utils/StringUtils.java
@@ -1,12 +1,11 @@
 package org.jeecg.utils;
 
-import org.apache.commons.lang.text.StrBuilder;
-import org.jeecg.utils.support.StrFormatter;
-
 import java.lang.reflect.Field;
 import java.util.Collection;
 import java.util.Map;
 
+import org.apache.commons.lang.text.StrBuilder;
+
 /**
  * 字符串工具类
  * @author huaheng
@@ -238,25 +237,6 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
     }
 
     /**
-     * 格式化文本, {} 表示占位符<br>
-     * 此方法只是简单将占位符 {} 按照顺序替换为参数<br>
-     * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可<br>
-     * 例:<br>
-     * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b<br>
-     * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a<br>
-     * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b<br>
-     * @param  template 文本模板,被替换的部分用 {} 表示
-     * @param  params   参数值
-     * @return          格式化后的文本
-     */
-    public static String format(String template, Object... params) {
-        if (isEmpty(params) || isEmpty(template)) {
-            return template;
-        }
-        return StrFormatter.format(template, params);
-    }
-
-    /**
      * 驼峰首字符小写
      */
     public static String uncapitalize(String str) {
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengShiroConfig.java b/huaheng-wms-core/src/main/java/org/jeecg/utils/config/HuahengShiroConfig.java
index 8a80708..ed6c1e2 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/utils/HuahengShiroConfig.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/utils/config/HuahengShiroConfig.java
@@ -1,4 +1,4 @@
-package org.jeecg.utils;
+package org.jeecg.utils.config;
 
 import java.util.LinkedHashMap;
 import java.util.Map;
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/utils/CustomLogContextListener.java b/huaheng-wms-core/src/main/java/org/jeecg/utils/listener/CustomLogContextListener.java
index 46735d8..dfa74f5 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/utils/CustomLogContextListener.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/utils/listener/CustomLogContextListener.java
@@ -1,4 +1,4 @@
-package org.jeecg.utils;
+package org.jeecg.utils.listener;
 
 import ch.qos.logback.classic.Level;
 import ch.qos.logback.classic.Logger;
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/utils/RedissonDistributedLocker.java b/huaheng-wms-core/src/main/java/org/jeecg/utils/support/RedissonDistributedLocker.java
index 82d2210..a564ef5 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/utils/RedissonDistributedLocker.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/utils/support/RedissonDistributedLocker.java
@@ -1,4 +1,4 @@
-package org.jeecg.utils;
+package org.jeecg.utils.support;
 
 import java.util.concurrent.TimeUnit;
 
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/utils/support/StrFormatter.java b/huaheng-wms-core/src/main/java/org/jeecg/utils/support/StrFormatter.java
deleted file mode 100644
index aa86bae..0000000
--- a/huaheng-wms-core/src/main/java/org/jeecg/utils/support/StrFormatter.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package org.jeecg.utils.support;
-
-import org.jeecg.utils.StringUtils;
-
-/**
- * 字符串格式化
- * @author huaheng
- */
-public class StrFormatter {
-
-    public static final String EMPTY_JSON = "{}";
-    public static final char C_BACKSLASH = '\\';
-    public static final char C_DELIM_START = '{';
-    public static final char C_DELIM_END = '}';
-
-    /**
-     * 格式化字符串<br>
-     * 此方法只是简单将占位符 {} 按照顺序替换为参数<br>
-     * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可<br>
-     * 例:<br>
-     * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b<br>
-     * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a<br>
-     * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b<br>
-     * @param  strPattern 字符串模板
-     * @param  argArray   参数列表
-     * @return            结果
-     */
-    public static String format(final String strPattern, final Object... argArray) {
-        if (StringUtils.isEmpty(strPattern) || StringUtils.isEmpty(argArray)) {
-            return strPattern;
-        }
-        final int strPatternLength = strPattern.length();
-
-        // 初始化定义好的长度以获得更好的性能
-        StringBuilder sbuf = new StringBuilder(strPatternLength + 50);
-
-        int handledPosition = 0;
-        int delimIndex;// 占位符所在位置
-        for (int argIndex = 0; argIndex < argArray.length; argIndex++) {
-            delimIndex = strPattern.indexOf(EMPTY_JSON, handledPosition);
-            if (delimIndex == -1) {
-                if (handledPosition == 0) {
-                    return strPattern;
-                } else { // 字符串模板剩余部分不再包含占位符,加入剩余部分后返回结果
-                    sbuf.append(strPattern, handledPosition, strPatternLength);
-                    return sbuf.toString();
-                }
-            } else {
-                if (delimIndex > 0 && strPattern.charAt(delimIndex - 1) == C_BACKSLASH) {
-                    if (delimIndex > 1 && strPattern.charAt(delimIndex - 2) == C_BACKSLASH) {
-                        // 转义符之前还有一个转义符,占位符依旧有效
-                        sbuf.append(strPattern, handledPosition, delimIndex - 1);
-                        sbuf.append(Convert.utf8Str(argArray[argIndex]));
-                        handledPosition = delimIndex + 2;
-                    } else {
-                        // 占位符被转义
-                        argIndex--;
-                        sbuf.append(strPattern, handledPosition, delimIndex - 1);
-                        sbuf.append(C_DELIM_START);
-                        handledPosition = delimIndex + 1;
-                    }
-                } else {
-                    // 正常占位符
-                    sbuf.append(strPattern, handledPosition, delimIndex);
-                    sbuf.append(Convert.utf8Str(argArray[argIndex]));
-                    handledPosition = delimIndex + 2;
-                }
-            }
-        }
-        // append the characters following the last {} pair.
-        // 加入最后一个占位符后所有的字符
-        sbuf.append(strPattern, handledPosition, strPattern.length());
-
-        return sbuf.toString();
-    }
-
-}